如何在自定义帖子类别页面模板上设置post_per_page?

时间:2019-05-22 23:56:47

标签: wordpress post

我为包含自定义帖子字段的帖子类别页面创建了自定义模板。这是一个“事件”页面,我在这里隐藏过去的帖子(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);
        }
    }

}

1 个答案:

答案 0 :(得分:0)

似乎您不是在告诉您的帖子循环使用获取的帖子,而是使用了最初由您的主题获取的全局帖子。

尝试此小技巧:

if ( count($posts) > 0 ) : foreach ( $posts as $post ) : setup_postdata( $post );
// Your code here
endforeach; endif;

通过这种方式,您可以设置循环以使用get_posts()查询中的帖子。

循环完成后,您可以使用wp_reset_postdata();重置全局发布数据以再次使用原始发布查询。通常,在自定义循环完成后添加此内容是一种很好的做法。