รับโพสต์เนื้อหาจากนอกวง


22

มีวิธีการรับเนื้อหาจากนอกวงหรือไม่ ID คือ 302 และฉันต้องแสดงเนื้อหาของหน้านั้นในหน้าอื่น


ไม่ทราบ ID หรือ ใช้ประโยชน์จากget_queried_object_id()! developer.wordpress.org/reference/classes/wp_query/…
jave.web

คำตอบ:


39

คุณสามารถใช้get_page()เพื่อส่งคืน$postวัตถุของหน้าคงที่:

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

แก้ไข

ในทำนองเดียวกันคุณสามารถใช้get_post()เพื่อส่งคืน$postวัตถุของโพสต์:

$post_id = 302;
$post_object = get_post( $post_id );
echo $post_object->post_content;

รหัสย่อยังคงใช้งานได้เมื่อใช้สิ่งนี้หรือไม่
Tim Baas

เพิ่งพบว่ามันไม่ได้ ใช้setup_postdata( $post );ครั้งแรกหลังจากนั้นคุณสามารถใช้the_content();
Tim Baas

4
คุณสามารถวิ่งได้apply_filters( 'the_content', $post_object->post_content );
Nathan Powell

6

เพื่อรับเนื้อหาของโพสต์ภายนอกลูปคุณสามารถเขียนสิ่งนี้

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

if ( !empty( $content ) ) :
    echo $content;
endif;

3

หากเนื้อหาของคุณมีรหัสย่อคุณควรใช้:

$post_id = 22;        
$post_object = get_post( $post_id );        
echo do_shortcode( $post_object->post_content );


หน้านั้นไม่ได้ให้เหตุผลที่น่าสนใจที่จะหลีกเลี่ยงdo_shortcodeนอกเหนือจากการพูดว่า "มันอาจช้า" และ "คุณสามารถใช้ฟังก์ชั่นที่เรียกรหัสสั้น ๆ " เหตุผลเหล่านั้นใช้ได้เฉพาะกับสิ่งเล็กน้อยที่สุดสำหรับสถานการณ์ที่ง่ายที่สุดเท่านั้น มันล้มเหลวเมื่อมีการสร้างรหัสย่อที่อื่นหรือหากมีหลายรหัสย่อหรือรหัสย่อผสมกับเนื้อหาและมาร์กอัปอื่น ๆ do_shortcodeโดยไม่ต้องมีเหตุผลที่น่าสนใจผมจะไม่เห็นด้วยกับคำสั่งที่จะหลีกเลี่ยง นี้มีกลิ่นเหมือนการเพิ่มประสิทธิภาพก่อนวัยอันควร
เจฟฟ์

และยังเพิ่มการเชื่อมต่อระหว่างรหัสของคุณและรหัสย่อของต้นฉบับ หากมีการเปลี่ยนวิธีการสำรองข้อมูลของรหัสย่อหรือการเปลี่ยนแปลงลายเซ็นรหัสของคุณจะแตก
เจฟฟ์

1

เพื่อความสมบูรณ์การสร้างความคิดเห็นของทิมข้างต้นและได้รับแรงบันดาลใจจากบทความของ Stephen Harrisวิธีการแก้ปัญหาที่ทำให้สามารถใช้งานได้the_content()คือ:

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

และด้วยเหตุนี้ตัวกรองจึงถูกนำไปใช้ (ย่อหน้าจะถูกแทรก ฯลฯ ) และรหัสย่อทำงานได้


สิ่งนี้เกือบจะทำให้เบราว์เซอร์ของฉันพัง: / นำแอมเปอร์แซนด์ออกมาช่วย แต่ก็ยังไม่ได้แยกรหัสย่อ
Zade

0

เนื่องจากคุณทราบ ID โพสต์เป้าหมายของคุณ (302) คุณอาจพบว่ามีประโยชน์กับไวยากรณ์ชวเลขนี้ที่คุณสามารถใช้จากลูป (แม้ว่าประสิทธิภาพจะค่อนข้างเหมือนกับในวิธีอื่น ๆ :)

echo(get_post_field('post_content',302));

0

คุณสามารถใช้get_post_data()ฟังก์ชั่นเพื่อโพสต์นอกวง วางรหัสนี้ใน functions.php

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

จากนั้นเพิ่มตัวอย่างนี้เพื่อควบคุมกระบวนการได้มากขึ้น

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

คุณสามารถใช้วิธีแก้ปัญหาด้วยget_postและ$post_object->post_contentแต่อย่าลืมเพิ่มการตรวจสอบก่อนที่คุณจะใช้วัตถุที่โพสต์:

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

ใช้wp_reset_postdata();มันจะทำงาน .. (แก้ไข)

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

ประเภทโพสต์สามารถเป็น "โพสต์", "หน้า" หรือประเภทโพสต์ที่กำหนดเองของคุณ ที่นี่ p = 302 เป็นรหัสโพสต์ของคุณหวังว่ามันจะใช้ได้


2
อย่าใช้query_postsจนกว่าคุณจะต้องทำลายฟังก์ชันการใช้งาน ใช้WP_Queryหรือget_postsสำหรับข้อความค้นหาที่กำหนดเองทุกครั้ง :-)
Pieter Goosen

ใช่ .. คุณถูกต้อง .. มันสามารถ Wp_Query ได้เช่นกัน .. พบผลลัพธ์เดียวกัน ..
Jahirul Islam Mamun

นอกจากนี้ยังมีตัวกรองและpre_get_posts the_postรายละเอียดมากมาย
นาธานพาวเวลล์

-3

คุณสามารถใส่เนื้อหาในหมวดหมู่ X และใช้ query_post ก่อนหน้านี้ได้เช่นนี้:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.