首页 > 解决方案 > 如何在自定义帖子类别页面模板上设置 post_per_page?

问题描述

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

}

标签: wordpresspost

解决方案


似乎您并没有告诉您的帖子循环使用获取的帖子,而是他们正在使用最初由您的主题获取的全局帖子。

试试这个小修复:

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

这样,您就可以设置循环以使用get_posts()查询中的帖子。

循环完成后,您可以重置全局帖子数据以再次使用原始帖子查询,wp_reset_postdata();一般来说,在自定义循环完成后添加它是一种很好的做法。


推荐阅读