我为包含自定义帖子字段的帖子类别页面创建了自定义模板。这是一个“事件”页面,我在这里隐藏过去的帖子(event_date_end)。现在的问题是'post_per_page'无法正常工作。我认为这是主题的本质,主题多达8个帖子。我想显示所有帖子(过去的活动除外)。
/*
Events Category Template
*/
// get posts
$posts = array(
'posts_per_page' => -1,
'post_type' => 'post',
'post_status' => 'publish',
'orderby' => 'meta_value',
'meta_key' => "event_date_end",
'meta_compare' => '>=',
'meta_value' => date("Ymd"),
'orderby' => 'meta_value_num',
'order' => 'ASC',
);
$posts=get_posts($posts);
get_header(); ?>
<div id="main-content">
<div class="container">
<h1 class="cat-title"><?php echo single_cat_title(); ?></h1>
<div id="content-area" class="clearfix">
<div id="left-area">
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
?>
<!-- Divi Library for Events-->
<?php echo do_shortcode('[et_pb_section global_module="2564"][/et_pb_section]');?>
<?php
endwhile;
if ( function_exists( 'wp_pagenavi' ) )
wp_pagenavi();
// else
// get_template_part( 'includes/navigation', 'index' );
// else :
// get_template_part( 'includes/no-results', 'index' );
endif;
?>
</div> <!-- #left-area -->
<?php get_sidebar(); ?>
</div> <!-- #content-area -->
</div> <!-- .container -->
</div> <!-- #main-content -->
<?php
get_footer();
我还尝试将下面的代码添加到functions.php中,该方法可以正常工作,但它没有隐藏过去的事件(实际上将空条目添加到底部):
// Increase limit of posts on Events/Agenda pages
add_filter('pre_get_posts', 'posts_in_category');
function posts_in_category($query){
if ($query->is_category) {
if (is_category('agenda')) {
$query->set('posts_per_archive_page', -1);
}
if (is_category('agenda-fr')){
$query->set('posts_per_archive_page', -1);
}
}
}
答案 0 :(得分:0)
似乎您不是在告诉您的帖子循环使用获取的帖子,而是使用了最初由您的主题获取的全局帖子。
尝试此小技巧:
if ( count($posts) > 0 ) : foreach ( $posts as $post ) : setup_postdata( $post );
// Your code here
endforeach; endif;
通过这种方式,您可以设置循环以使用get_posts()
查询中的帖子。
循环完成后,您可以使用wp_reset_postdata();
重置全局发布数据以再次使用原始发布查询。通常,在自定义循环完成后添加此内容是一种很好的做法。