如何阻止WordPress归档页面分页并返回404?
解决WordPress自定义文章类型归档分页禁用及分页路径404问题
你的代码问题在于未精准定位目标归档页面,也未处理分页路径的404返回逻辑。以下是可行的解决方案:
1. 精准禁用目标归档的分页
修改pre_get_posts钩子函数,仅针对services自定义文章类型的主查询禁用分页:
function disable_services_pagination($query) { // 仅针对主查询 + services自定义文章类型归档页面生效 if ($query->is_main_query() && $query->is_post_type_archive('services')) { $query->set('nopaging', true); // 强制设置posts_per_page为-1,确保所有内容一次性加载 $query->set('posts_per_page', -1); } } add_action('pre_get_posts', 'disable_services_pagination');
2. 拦截分页路径并返回404
添加template_redirect钩子,当用户访问/services/page/2/及后续分页路径时,直接返回404页面:
function block_services_pagination_paths() { // 检查是否为services归档页面,且分页参数大于1 if (is_post_type_archive('services') && get_query_var('paged') > 1) { // 触发404状态 global $wp_query; $wp_query->set_404(); status_header(404); get_template_part(404); exit; } } add_action('template_redirect', 'block_services_pagination_paths');
关键说明
- 必须加上
is_main_query()判断,避免影响侧边栏、自定义查询等其他页面查询逻辑 posts_per_page设为-1是为了确保nopaging生效后,所有文章都被加载,不会出现隐性分页template_redirect在页面模板加载前触发,能及时拦截无效分页请求并返回404
将以上两段代码添加到主题的functions.php文件中即可解决问题。
内容的提问来源于stack exchange,提问作者Johnathan Cookson
相关产品推荐
相关产品推荐

