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;

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;

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 );


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.


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));

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
?>

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 );


-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.


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; ?>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.