我已经创建了一个包含文件,它允许我使用类别筛选器来过滤我的帖子查询。我试图动态获取post_count
和found_posts
,以便我可以显示Showing 6 out of 12 Posts
。我在自定义页面模板上包含此过滤器,并使用自定义WP_Query,但我得到Showing 1 out of 1 Posts
尽管有10+ posts.我相信它这样做的原因是因为过滤器包含使用单页查询,而不是我的自定义帖子查询.我如何去更新这一点,使过滤器使用我的自定义发布查询?
inc/filter.php:
<?php
global $wp_query;
$count = $wp_query->post_count;
$total = $wp_query->found_posts;
?>
<div class="container">
<div class="row">
<div class="col">
<?php $get_categories = get_categories(); ?>
<select>
<option selected disabled>Select category</option>
<option value="all">All</option>
<?php
if ($get_categories) :
foreach ($get_categories as $cat) :
?>
<option value="<?php echo $cat->term_id; ?>">
<?php echo $cat->name; ?>
</option>
<?php endforeach;
endif;
?>
</select>
<div class="shown-posts">Showing <span class="visible-posts"><?php echo $count; ?></span> of <span class="total-posts"><?php echo $total; ?></span> posts</div>
</div>
</div>
</div>
字符串
这是我的自定义页面模板:
<?php get_header();?>
<?php
$posts = new WP_Query(array(
'post_type' => 'post'
));
?>
<?php if($posts->have_posts()): ?>
// Here's where I'm including the filter file
<?php get_template_part( 'inc/filter' ); ?>
<div class="container post-container">
<div class="row row-eq-height">
<?php while ($posts->have_posts()) : $posts->the_post();
the_title();
endwhile; ?>
</div>
</div>
<?php endif; ?>
型
3条答案
按热度按时间wz8daaqr1#
通过
get_template_part()
传递变量到模板的正确方法是将它们添加到WordPressquery_vars
。所以在inc/filter.php中删除所有这些.
字符串
然后在主模板中添加.
型
baubqpgj2#
将inc/filter.php中的计算修改为:
字符串
你是对的,全局WP_Query对象指向的是包含所有这些的单个页面。示例化一个新的WP_Query不会覆盖全局WP_Query。最后,请注意,当你include the filter file时,你的作用域没有任何变化--所以,只要继续使用你已经设置的
$posts
变量。2jcobegt3#
更新2023
(实际上,自WP 5.5中期以来,尽管很多人不使用它
在主模板中,只有一行:
字符串
WordPress文档
从WordPress 5.5开始,模板加载函数现在允许使用新的$args参数将额外的参数传递到匹配的模板文件。
多年来,希望将数据传递到模板文件的主题开发人员不得不使用不太理想的解决方案。这包括使用全局变量,set_query_var(),include(locate_template())模式,或自己版本的get_template_part()等。
https://make.wordpress.org/core/2020/07/17/passing-arguments-to-template-files-in-wordpress-5-5/