web-dev-qa-db-ja.com

この{single-custom_post_type.php}ページでthe_content()が機能しないのはなぜですか?

このコードは私のページsingle-publication.phpからのものです。

関連するカスタムフィールドなど(ここではテンプレートタグで囲まれています)を出力しますが、the_content()は投稿内容を出力しません。私は$post->post_content(これはうまくいきます)を使うことに頼りました、しかし謎は残ります:

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

何が起きてる?

編集: $postが機能し、get_the_title()がタイトルを返すことはループの中にいるという鉄板の合図であると誤って考えました。しかし、どうやらこれはそうではありません。 cf ループのコーデックス (2番目の段落)および get_the_title()のコーデックス (パラメータリスト)。誰か説明できますか?

7
djb

投稿関連のデータの中には、デフォルトではget_postsでは使用できないものがあります _(the_content()を介した投稿コンテンツ、数値IDなど)。これは、$ post配列を引数として、内部関数setup_postdata()を呼び出すことで解決されます。

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

すべての投稿データにアクセスする を参照してください。

3
Giraldi

HTMLがループに含まれていない可能性があります。コードがこのようになっていることを確認してください。

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;
9
Brian Fegter