Nhận nội dung bài đăng từ bên ngoài vòng lặp


Câu trả lời:


39

Bạn có thể sử dụng get_page()để trả về $postđối tượng của trang tĩnh:

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

Chỉnh sửa

Tương tự, bạn có thể sử dụng get_post()để trả về $postđối tượng của bài đăng:

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

Shortcodes vẫn hoạt động khi sử dụng này?
Tim Baas

Chỉ cần tìm ra nó không. Sử dụng setup_postdata( $post );trước, sau đó, bạn có thể sử dụngthe_content();
Tim Baas

4
Bạn chỉ có thể chạyapply_filters( 'the_content', $post_object->post_content );
Nathan Powell

6

để có được nội dung của bài viết bên ngoài vòng lặp, bạn có thể viết một cái gì đó như thế này

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

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

3

Nếu nội dung của bạn bao gồm mã ngắn, bạn nên sử dụng:

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


Trang đó không cung cấp lý do thuyết phục để tránh do_shortcodengoài việc nói, "Nó có thể chậm" và "Bạn chỉ có thể sử dụng chức năng mà mã ngắn gọi." Những lý do đó chỉ có giá trị cho tầm thường nhất cho các kịch bản đơn giản nhất. Không thành công khi shortcode được tạo ở một nơi khác hoặc nếu có nhiều mã ngắn hoặc mã ngắn được trộn lẫn với nội dung và đánh dấu khác. Nếu không có lý do thuyết phục, tôi sẽ không đồng ý với tuyên bố cần tránh do_shortcode. Điều này có mùi như tối ưu hóa sớm .
Jeff

Và nó cũng làm tăng sự ghép nối giữa mã của bạn và mã gốc của mã ngắn. Nếu phương thức sao lưu của shortcode được đổi tên hoặc chữ ký thay đổi, mã của bạn sẽ bị hỏng.
Jeff

1

Để hoàn thiện, dựa trên nhận xét của Tim ở trên và lấy cảm hứng từ bài viết của Stephen Harris , giải pháp cho phép sử dụng the_content()là:

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

Và do đó, các bộ lọc được áp dụng (các đoạn sẽ được chèn, v.v.) và mã ngắn hoạt động.


Điều này gần như đã làm sập trình duyệt của tôi: / lấy ra các ký hiệu và giúp đỡ, nhưng nó vẫn không phân tích cú pháp ngắn.
Zade

0

Vì bạn biết ID bài đăng mục tiêu của mình (302), bạn có thể thấy cú pháp tốc ký này hữu ích mà bạn có thể sử dụng ngoài vòng lặp (mặc dù hiệu suất của nó khá giống với bất kỳ phương pháp thay thế nào khác :)

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

0

Bạn có thể sử dụng get_post_data()chức năng để có được bài viết bên ngoài vòng lặp. Đặt mã này trong Hàm.php

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

và sau đó thêm đoạn mã này để kiểm soát nhiều hơn về quy trình

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

Bạn có thể sử dụng, như đã nói, giải pháp với get_post$post_object->post_content, nhưng đừng quên thêm một kiểm tra trước khi bạn sử dụng đối tượng bài đăng đó:

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

sử dụng wp_reset_postdata();nó sẽ hoạt động .. (chỉnh sửa)

<?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 có thể là "bài", "trang" hoặc loại bài đăng tùy chỉnh của bạn. Ở đây p = 302 là id bài viết của bạn .. Hy vọng nó sẽ hoạt động.


2
Không bao giờ sử dụng query_poststrừ khi bạn cần phá vỡ các chức năng trang. Luôn sử dụng WP_Queryhoặc get_postscho các truy vấn tùy chỉnh :-)
Pieter Goosen

vâng .. bạn đúng .. Nó cũng có thể Wp_Query .. kết quả tương tự được tìm thấy ..
Jahirul Hồi giáo Mamun

Ngoài ra còn có pre_get_postsbộ lọc, và the_post. Rất nhiều chi tiết.
Nathan Powell

-3

bạn có thể đặt nội dung trong danh mục X và sử dụng query_post trước khi như thế này:

    <?php query_posts('cat=X&showposts=1'); ?>
    <?php while (have_posts()) : the_post(); ?>
          <?= get_the_content(); ?>
    <?php endwhile; ?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.