解决wordpress中自定义类型或page类型的分页查询404问题

本文介绍了在WordPress中遇到自定义类型或page类型文章分页出现404错误的原因和解决方法。问题源于查询参数未指定正确文章类型,通过注册到WordPress事件并调整查询参数,可以成功解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在wordpress中查询post类型的文章分页是没问题的, 但是查询page和自定义类型的分页会出现404问题, 我们就来解决这个问题.

必备概念

  1. wordpress可以自定义许多文章类型, wordpress自带的有就是post和page类型.

  2. 当我们向wordpress发出请求时, wordpress会解析我们的请求参数, 然后把这些参数给WP_Query对象进行查询, 最后把查询结果保存在一系列变量中, 而我们使用the_title()等函数的时候, 就是获取这些变量的值.

  3. wordpress自带很多事件, 我们可以把函数注册到这些事件中, 来修改wordpress执行的某些过程.

问题原因

当我们查询post类型文章的分页是不会出问题的, 但当我们查询自定义类型或page类型文章分页时出现404问题, 很显然是wordpress的WP_Query查询结果出了问题, 而wordpress的查询是通过我们传递的参数进行的, 那么追根溯源一定是我们参数有问题.

我们以http://q5.abc/category/md5gj/page/2做举例, md5gj分类下面全是page类型的文章, 下图是打印出的WP_Query对象内容, 其中最关键的就是query参数, 里面包含了我们请求的查询条件:

20220126083632-2022-01-26-08-36-32

由上图可知我们的query只包含了paged=2category_name=md5gj这两个参数, 但如果大家去看WP_Query的文档就知道, 还有一个叫做post_type的参数, 该参数默认是post类型, 也就是说上图的查询条件实际是下面这样的:

paged=2
category_name=md5gj
post_type=post

由此我们可以知道为什么当查询page类型或自定义文章类型时, 会报404错误了, 因为wordpress不知道你要查询什么文章类型, 全部默认是post类型.

解决方法

既然它不知道, 我们在查询之前告诉wordpress要查询的文章类型就行了, 使用到wordpress的request事件, 下面是示例代码, 这段代码还调整了排序规则:


  public function modifyQueryParams($qs){
    $qs['post_type'] = 'page';
    $qs['order'] = 'ASC';
    return $qs;
  }

  add_filter('request','modifyQueryParams');

下图是修改参数后的Wp_Query对象的内容:

20220126085247-2022-01-26-08-52-48

文章首发于: https://hedaoshe.com/317.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值