tại sao the_content () không hoạt động trong trang {single-custom_post_type.php} này?


7

Mã này là từ trang của tôi single-publication.php.

Nó xuất ra các trường tùy chỉnh có liên quan, v.v. (ở đây được bọc trong các thẻ mẫu), nhưng the_content()sẽ không xuất nội dung bài đăng. Tôi đã sử dụng $post->post_content(hoạt động), nhưng bí ẩn vẫn còn:

<div class="publication-info">
    <?php printf("<h2>%s</h2>", get_the_title() ); ?>
    <div class="publication-meta publication-credit"><?php the_publication_credit(); ?></div>
    <div class="publication-meta publication-date"><?php the_publication_date(); ?></div><br />
    <div class="publication-blurb" style="font-family:sans-serif;"><?php echo $post->post_content; // the_content() doesn't work. Why not? ?></div>
</div>

Những gì đang xảy ra ở đây?

EDIT: Tôi đã bị thúc đẩy để hỏi câu hỏi này bởi vì tôi tin rằng - nhầm, khi nó bật ra - rằng $postlàm việc và get_the_title()trả lại một tiêu đề là một dấu hiệu sắt trong vòng lặp. Nhưng rõ ràng đây không phải là trường hợp. cf Codex trên The Loop (đoạn thứ hai) và Codex trên get_the_title () (danh sách tham số). Bất cứ ai có thể giải thích?


2
Là khối thông tin xuất bản của bạn trong vòng lặp?
Brian Fegter

Tôi đang giả sử như vậy, như $postlà dân cư và get_the_title()hoạt động
djb

Câu trả lời:


3

Một số dữ liệu liên quan đến bài đăng không có sẵn cho get_posts theo mặc định , chẳng hạn như nội dung bài đăng thông qua the_content()hoặc ID số. Điều này được giải quyết bằng cách gọi một hàm nội bộ setup_postdata(), với mảng $ post làm đối số của nó:

<?php
$args = array( 'posts_per_page' => 3 );
$lastposts = get_posts( $args );
foreach ( $lastposts as $post ) :
  setup_postdata( $post ); ?>
    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <?php the_content(); ?>
<?php endforeach; 
wp_reset_postdata();
?>

Xem Truy cập tất cả dữ liệu bài viết


9

Có một cơ hội tốt HTML của bạn không được bao gồm trong vòng lặp. Hãy chắc chắn rằng mã của bạn trông như thế này:

if(have_posts()): while(have_posts()): the_post(); ?>

    <div class="publication-info">
        <?php printf("<h2>%s</h2>", get_the_title() ); ?>
        <div class="publication-meta publication-credit"><?php the_publication_credit(); ?></div>
        <div class="publication-meta publication-date"><?php the_publication_date(); ?></div><br />
        <div class="publication-blurb" style="font-family:sans-serif;"><?php echo $post->post_content; // the_content() doesn't work. Why not? ?></div>
    </div>

<?php endwhile; endif;

vâng, cái này hoạt động cảm ơn. nhưng làm thế nào tôi có thể có được get_the_title () từ bên ngoài vòng lặp? codex nói$ID (int) (optional) Post ID or leave empty to use current post in The Loop
djb

Bởi vì nó sử dụng đối tượng $ post được đặt cho trang. Đó là một chút chắc chắn. the_content () phụ thuộc vào hàm_post ().
Brian Fegter

Có, bạn phải đặt the_content()chức năng bên trong vòng lặp. Cách tôi cảm thấy the_content()nên được đặt trong một single.phphoặc post-type.phptập tin. Nhưng vì lý do nào đó thì không. Bạn vẫn cần phải có một vòng lặp trong single.phphoặc post-type.phptập tin.
Sisir

cảm ơn rất nhiều. một yêu cầu cuối cùng: bạn có thể chỉ cho tôi bất kỳ tài nguyên nào giải thích thêm một chút về thời điểm và cách $ post thực sự được đặt, nếu nó không được đặt ở đầu vòng lặp không? muốn hiểu
djb

@BrianFegter sửa tôi nếu tôi sai: trong single-{post_type}.php, luôn có 1 bài. Do đó, while(have_posts()){}có thể được bỏ qua. Phải không?
Raptor
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.