首页 > 解决方案 > 自定义存档和分页

问题描述

谁能解释一下这个看似奇怪的wordpress行为吗?

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

我有一个自定义帖子类型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/我看到的前 2 个参展商如您所愿列出,但当我访问时,/exhibitors/page/2/我实际上得到了 404 页面。

如果我重置blog posts to show at most为 5,我可以转到/exhibitors/page/2/并看到第三和第四个帖子,如你所料,但现在第 3 页不起作用。blog posts to show at most如果我设置为 1,我只能让它正常工作。

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

感激地接受任何帮助

标签: wordpresswordpress-theming

解决方案


我找到了解决方法,而不是解决方案!我只是在这里发布这个,所以它可以帮助其他人。我我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 的基础上进行。请注意,我正在检查它不是管理页面,因为这仅适用于前端。

有谁知道更好的解决方案??


推荐阅读