Dapatkan konten pos dari luar lingkaran

Jawaban:

39

Anda dapat menggunakan get_page()untuk mengembalikan $postobjek halaman statis:

$page_id = 302;
$page_object = get_page( $page_id );
echo $page_object->post_content;

Edit

Demikian pula, Anda dapat menggunakan get_post()untuk mengembalikan $postobjek posting:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;
Chris_O
sumber
Apakah kode pendek masih berfungsi saat menggunakan ini?
Tim Baas
Baru tahu itu tidak. Gunakan setup_postdata( $post );dulu, setelah itu, Anda bisa menggunakanthe_content();
Tim Baas
4
Anda bisa berlariapply_filters( 'the_content', $post_object->post_content );
Nathan Powell
6

untuk mendapatkan konten dari pos di luar loop Anda dapat menulis sesuatu seperti ini

global $post;
$content = $post->post_content;

if ( !empty( $content ) ) :
    echo $content;
endif;
Aamer Shahzad
sumber
3

Jika konten Anda menyertakan kode pendek, Anda harus menggunakan:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );
DSI_ClasH
sumber
Jangan lakukan shortcode kovshenin.com/2013/dont-do_shortcode
Brad Dalton
Halaman itu tidak memberikan alasan kuat untuk menghindari do_shortcodeselain mengatakan, "Ini mungkin lambat" dan "Anda bisa menggunakan fungsi yang dipanggil oleh kode pendek." Alasan-alasan itu hanya berlaku untuk skenario yang paling sepele untuk skenario paling sederhana. Gagal saat kode pendek dibuat di tempat lain, atau jika ada beberapa kode pendek, atau kode pendek dicampur dengan konten dan markup lainnya. Tanpa alasan kuat, saya tidak setuju dengan pernyataan itu untuk dihindari do_shortcode. Baunya seperti optimasi prematur .
Jeff
Dan itu juga meningkatkan sambungan antara kode Anda dan kode shortcode asli. Jika metode dukungan kode pendek diubah namanya atau tanda tangannya berubah, kode Anda akan rusak.
Jeff
1

Untuk kelengkapan, membangun komentar Tim di atas dan terinspirasi oleh artikel Stephen Harris , solusi yang memungkinkan penggunaan the_content()adalah:

$post_id = 302;
global $post;
$post = get_post($post_id);
setup_postdata( $post );
the_content();
wp_reset_postdata( $post );

Dan karenanya filter diterapkan (paragraf akan dimasukkan dll.) Dan shortcode bekerja.

Jon
sumber
Ini hampir membuat peramban saya hampir macet: / mengeluarkan bantuan ampersand, tetapi masih belum mem-parsing kode pendek.
Zade
0

Karena Anda tahu ID posting target Anda (302), Anda mungkin menemukan sintaks singkatan yang berguna ini yang dapat Anda gunakan di luar loop (meskipun kinerjanya hampir sama dengan metode alternatif lainnya :)

echo(get_post_field('post_content',302));
E. Serrano
sumber
0

Anda dapat menggunakan get_post_data()fungsi ini untuk mendapatkan posting di luar loop. Tempatkan kode ini di functions.php

function get_post_data($postId) {
    global $wpdb;
    return $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID=$postId");
}

lalu tambahkan potongan ini untuk kontrol lebih besar pada proses

<?php $data = get_post_data(302);
    echo $data->post_date;     // post date
    echo $data->post_title;    // post title
    echo $data->post_content;  // post content
    echo $data->comment_count; // comments number
?>
Zohair Baloch
sumber
0

Anda dapat menggunakan, seperti yang dikatakan, solusi dengan get_postdan $post_object->post_content, tetapi jangan lupa untuk menambahkan tanda centang sebelum Anda menggunakan objek posting itu:

function get_post_content( $post_id = null ) {
    $post_object = get_post( $post_id );
    if ( ! $post_object ) { return ''; }
    //else

    return apply_filters('the_content', $post_object->post_content);
}

echo get_post_content( $other_post_id );
Olga Farber
sumber
-1

Anda cukup memanggil get_the_content (postId)

<?php echo get_the_content($postId); ?>
NiemBlackPine
sumber
2
Sebenarnya itu tidak mungkin. Arg pertama ada untuk konten ketika ada lebih banyak tautan: codex.wordpress.org/Function_Reference/get_the_content
joshcanhelp
-2

menggunakannya wp_reset_postdata();akan bekerja .. (diedit)

<?php 
$args = array(
        'post_type' => 'posttype',
        'p' => 'post_id'
       );
$the_query = new WP_Query( $args );
if( have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php the_content(); ?>
    <?php endwhile; endif; 
wp_reset_postdata();
?>

posttype dapat berupa "posting", "halaman" atau jenis posting khusus Anda. Di sini p = 302 adalah id posting Anda .. Semoga ini akan berhasil.

Jahirul Islam Mamun
sumber
2
Jangan pernah gunakan query_postskecuali Anda perlu merusak fungsi halaman. Selalu gunakan WP_Queryatau get_postsuntuk permintaan khusus :-)
Pieter Goosen
ya .. Anda benar .. Bisa Wp_Query juga .. hasil yang sama ditemukan ..
Jahirul Islam Mamun
Ada juga pre_get_postsfilternya, dan the_post. Sangat detail.
Nathan Powell
-3

Anda dapat menempatkan konten dalam kategori X dan menggunakan query_post sebelumnya sambil seperti ini:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
Zakaria Elhariri
sumber