このコードは私のページ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()のコーデックス (パラメータリスト)。誰か説明できますか?
投稿関連のデータの中には、デフォルトでは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();
?>
すべての投稿データにアクセスする を参照してください。
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;