自定义帖子类型档案与‘POSTS_PER_PAGE’无关=>-1

时间:2014-10-07 作者:Anriëtte Myburgh

我有一个自定义的帖子类型存档,其中WP_Query 用于检索帖子。我想禁用分页并显示此存档上的所有帖子,但以下查询不起作用:

$args = array(
    \'post_type\' => array(
        \'cpt_sports\',
    ),
    \'posts_per_page\' => -1,
    \'orderby\' => \'menu_order\',
    \'order\' => \'desc\',
    \'max_num_pages\' => 1
);

$all_sports = new WP_Query($args);
我做错了什么?

1 个回复
最合适的回答,由SO网友:mrwweb 整理而成

WP_Query 用于辅助循环。也就是说,它完全独立于页面的默认设置$wp_query. 我怀疑它不起作用,因为你没有引用你的新WP_Query 循环中的对象。要做到这一点,您可以这样做:

if( $all_sports->have_posts() ) : while( $all_sports->have_posts() ) : $all_sports->the_post();
    // do stuff
endwhile; endif;

HOWEVER, you shouldn\'t do that!

相反,这是对pre_get_posts action. 该操作可用于修改任何页面上的默认查询,而无需更改页面模板。看到您只是想修改默认的自定义post类型存档查询,这就是您想要的。下面是一些未经测试的代码,它们可能会起到作用:

add_action( \'pre_get_posts\', \'wpse163734_pre_get_post\' );
function wpse163734_pre_get_post( $query ) {

    if( is_post_type_archive( \'cpt_sports\' ) && !is_admin() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', -1 );
        $query->set( \'orderby\', \'menu_order\' );
    }

}
你给的所有其他论点WP_Query 是自定义帖子类型存档页面查询的默认值,因此您无需修改它们。

结束

相关推荐

foreach pagination

我正在寻求有关如何对foreach输出分页的帮助。我查看了其他问题和答案,但找不到适合我的解决方案,也找不到可以自己解决的解决方案。现在,下面的代码将所有内容输出到表行中。当然,我的问题是,它将所有数据转储到一个页面上——因此我需要分页。我想为页面上的每11项分页。这一页是一份杂志档案,每年有11期——因此每一页相当于我们杂志的1年。第一页应该是第1-11期,第二页应该是第12-22期,等等。我们有10年的杂志期。任何帮助都将不胜感激。非常感谢。<table> <tr>&#