get_template_part in for loop

时间:2017-07-21 作者:woutr_be

由于模板(和布局)的设置,我需要能够在4个不同的分区中放置4个不同的帖子。

例如,我的结构如下

<div>Post 1</div>
<div>
    <div>Post 2</div>
    <div>
        <div>Post 3</div>
        <div>Post 4</div>
    </div>
</div>
但我在工作上遇到了一些麻烦,我用get_posts 获取4篇最新帖子。

$posts = 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 我试图显示标题和永久链接,但它总是显示当前页面的标题和链接。从来没有真正的职位。

4 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您的问题是变量传递给setup_postdata() 必须是全局的$post 变量,如下所示:

// Reference global $post variable.
global $post;

// Get posts.
$posts = get_posts(array(
    \'post_type\' => \'post\',
    \'post_count\' => 4
));  

// Set global post variable to first post.
$post = $posts[0];

// Setup post data.
setup_postdata( $post );

// Output template part.
get_template_part( \'template-parts/post-thumbnail\' );

// Reset post data.
wp_reset_postdata();
现在正常的模板函数,如the_post_thumbnail() 模板内的部分将引用正确的帖子。

SO网友:Tim Elsass

$帖子在帖子缩略图上下文中不可用。如果使用phpget_template_part(), 因此,它将使用为当前页面找到的帖子ID。您应该使用locate_template() 要使变量可用,get\\u template\\u 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(); ?>
然后,您就可以在页面模板/帖子缩略图中拥有任何内容。包含正确post数据的php模板:

<div>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</div>

SO网友:Johansson

除了处理全局变量之外,您还可以编写一个自定义循环,完全不需要额外的工作就可以使模板部分正常工作。例如:

$args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' => 4
);

$my_query = new WP_Query($args);
if ($my_query->have_posts()){
    while ($my_query->have_posts()){
        $my_query->the_post(); // This is where the post\'s data is set up
        get_template_part( \'template-parts/post-thumbnail\' );
    }
}
完成。您不需要为循环中的每个帖子设置帖子数据。

顺便说一句get_posts() 本身使用WP_Query() 获取帖子,但区别在于它不会为您设置帖子的数据,需要在循环后重置。

SO网友:While1

把它带到你的省份

<?php foreach ($posts as $post) : setup_postdata( $post ); ?>
    <div>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </div>
<?php endforeach; wp_reset_postdata(); ?>
wp_reset_postdata 重置当前查询的结果很重要。

结束

相关推荐

未定义变量:WooCommerce_loop

今天,我更新了woocommerce插件,在我的网站上发现以下错误:未定义变量:woocommerce\\u loop我的循环看起来像(对archive-product template 一年前):<?php $newReleasesCounter = 0; $loop = new WP_Query( $args_new_releases ); while ( $loop->have_posts() ) : $loop->the_post(); global $p