質問: get_posts(array( 'post_type' => 'post', 'post_count' => 4 )); それから私は自分の投稿を表示しようとします<?php setup_postdata($posts[0]); ?> <?php get_template_part( 'template-parts/post-thumbnail' ); ?> <?php wp_reset_postdata(); ?> template-parts/post-thumbnail.phpでは、タイトルとパーマリンクを表示しようとしていますが、常に現在のページのタイトルとリンクを表示しています。実際の投稿はありません。
回答: get_template_part() を使用している場合、$ postsはpost-thumbnail.phpのコンテキスト内では使用できないため、現在のページで見つかった投稿idが使用されます。変数を利用できるようにするには locate_template() を使用する必要があります。これは、get_template_partが内部的に使用するものです。<?php $posts = get_posts( array( 'post_type' => 'post', 'post_count' => 4 ) ); ?> <?php foreach ( $posts as $post ) : setup_postdata( $post ); ?> <?php locate_template( 'page-templates/post-thumbnail.php', true, false ); ?> <?php endforeach; wp_reset_postdata(); ?> そうすれば、正しい投稿データを持つpage-templates/post-thumbnail.phpテンプレートにあるものすべてを持つことができます。<div> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </div>