自定义存档和分页

时间:2018-08-16 14:30:32

标签: wordpress wordpress-theming

有人可以解释一下看似奇怪的wordpress行为吗?

我在blog pages show at most下将settings->reading设置为10-这是默认设置。

我有一个用于exhibitors的自定义帖子类型,并且已经创建了7种。

在参展商archive-exhibitors.blade.php的存档页面上,我一次只想显示2,因此我使用以下代码:

@php
    global $wp_query;
    $posts_per_page = 2 ;
    $paged = get_query_var('paged');
    if(!$paged){
        $paged = 1;
    }
    $args = [
        'post_type' => 'exhibitors',
        'posts_per_page' => $posts_per_page,
        'paged' => $paged,
    ];
    $wp_query = new WP_Query($args);

@endphp

@while (have_posts()) @php the_post() @endphp
@include('partials.content-'.get_post_type())
@endwhile

现在,当我转到/exhibitors/时,我看到的是您所期望的前两个展览,但是当我转到/exhibitors/page/2/时,实际上是在获取404页面。

如果我将blog posts to show at most重设为5,则可以转到/exhibitors/page/2/,我看到了您期望的第三和第四条帖子,但是现在第3页不起作用。如果将blog posts to show at most设置为1,我只能使它正常工作。

我真的不明白为什么会这样,就像发生了一些预查询一样,它正在查看全局设置,然后重定向到404,在这种情况下是不正确的。

感谢所有接受帮助的人

1 个答案:

答案 0 :(得分:0)

我找到了解决方法,而不是解决方案!我只是在这里发布,这样可能会对其他人有所帮助。我的functions.php我刚刚添加了这个:

function custom_posts_per_page( $query ) {
    if ( $query->is_archive('exhibitors') ) {
        if(!is_admin()){
            set_query_var('posts_per_page', 1);
        }
    }
}
add_action( 'pre_get_posts', 'custom_posts_per_page' );

这似乎会覆盖默认的blog posts to show设置,您可以基于每个post_type进行设置。注意,我正在检查它不是管理员页面,因为这只是前端。

任何人都知道更好的解决方案吗?