自定义文章类型归档页显示数量调整及后台显示异常问题
我来帮你搞定这个问题!你遇到的情况是因为修改posts_per_page的时候没有限定生效场景,导致后台的文章列表查询也被意外影响了。咱们只需要给查询添加精准的条件判断,只针对前台的自定义文章类型归档页生效,同时保证分页逻辑正常运行。
解决方案步骤
1. 用pre_get_posts钩子做精准修改
替换掉你之前全局修改的代码,在主题的functions.php里添加这段代码:
add_action('pre_get_posts', 'custom_cpt_archive_posts_per_page'); function custom_cpt_archive_posts_per_page($query) { // 仅对前台、主查询、且是目标自定义文章类型归档页生效 if (!is_admin() && $query->is_main_query() && is_post_type_archive('你的自定义文章类型slug')) { $query->set('posts_per_page', 6); } return $query; }
记得把代码里的你的自定义文章类型slug替换成你实际创建的自定义文章类型标识(比如你注册的是portfolio就填这个)。
2. 确保分页逻辑适配新的显示数量
如果你已经在归档页加了分页代码,要确认它是基于当前查询的参数生成的。推荐用这样的分页代码来适配:
global $wp_query; $big = 999999999; // 用大数避免页码冲突 echo paginate_links(array( 'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))), 'format' => '?paged=%#%', 'current' => max(1, get_query_var('paged')), 'total' => $wp_query->max_num_pages, 'prev_text' => __('上一页'), 'next_text' => __('下一页') ));
这段代码会自动根据你设置的6篇/页来计算总页数,不会出现分页失效的问题。
为什么之前的方法会影响后台?
如果直接全局设置posts_per_page,或者在pre_get_posts钩子中没加!is_admin()的判断,WordPress后台的文章列表查询也会继承这个修改。加上!is_admin()就把调整范围限定在了前台,后台会保持默认的文章显示数量(通常是20篇)。
内容的提问来源于stack exchange,提问作者Crashy
相关产品推荐
相关产品推荐

