问题描述
最近,在浏览牛奇网网站的时候,突然发现在访问文章分类页的分页的时候,点击分页会跳转到一篇文章内。我当时认为应该是主题的问题,因为牛奇网使用的是正版“justnews”主题,所以我第一时间联系WPCOM的客服,反馈主题存在BUG。
经过跟客服简单沟通,客服让我通过网站提交工单反馈,提交工单半个多小时候以后,就收到了工单回复(这一点值得称赞)。大意是说我反馈的问题,不是主题导致的问题,而是设置的固定链接的规则造成,给了我两个解决方案,内容如下图所示:
为了验证是否为主题造成,我将justnews主题切换到其他主题,结果问题依然存在,看来确实不是主题的问题造成的。但是上面给出的两个解决方案,却不能让我满意。虽然牛奇网是一个新站,但是网站已经有一定的收录了,这个时候更改链接规则,就会造成被百度收录的页面的链接失效。看来还是要靠自己来找解决方案,最终终于被我找到了解决方案,现在将解决的办法分享给大家,希望能够帮助遇到同样问题的朋友。
问题原因
这个问题产生的原因,正如justnews客服所言,是在固定链接里设置的“自定义链接”规则造成的。为了使文章URL具有可读性,也为了通过URL来体现网站内容的层次结构,很多站长和SEO从业人员,都希望创建类似“/文章分类/文章内容/”的URL结构(如下方所示),这样对搜索引擎来说也更加的友好。
/%category%/%postname%/
在WordPress网站中,如果创建了上面所示的自定义链接结构,在浏览文章或者分类页面的时候都不会出现问题,但是一旦你在分类页面点击了分页页面,就可能会出现404错误提示,或者会出现牛奇网所遇到的跳转到某篇文章的情况。如下面的URL所示:
www.your_site.com/your_taxonomy/page/2
解决方案
方案一
要解决如上所述的问题,我们需要将以下代码添加到主题的functions.php文件中:
function Bamboo_request($query_string) { if(isset($query_string ['page'])){ if(''!= $query_string ['page']){ if(isset($query_string ['name'])){ unset($query_string ['name']); } } } return $QUERY_STRING; } add_filter('request','bamboo_request');
add_action('pre_get_posts','bamboo_pre_get_posts'); function Bamboo_pre_get_posts($ query){ if($ query-> is_main_query()&&!$ query-> is_feed()&&!is_admin()){ $ query-> set('paged',str_replace('/','' ,get_query_var('page'))); } }
以上代码可以成功解决文章分类页分页的错误问题,但是却无法解决搜索结果分页的错误。
方案二
同方案一一样,我们将以下代码添加到主题的functions.php文件中:
/**
* Fix pagination on archive pages
* After adding a rewrite rule, go to Settings > Permalinks and click Save to flush the rules cache
*/
function my_pagination_rewrite() {
add_rewrite_rule('blog/page/?([0-9]{1,})/?$', 'index.php?category_name=blog&paged=$matches[1]', 'top');
}
add_action('init', 'my_pagination_rewrite');
该方案可以成功解决搜索结果分页的问题,但是无法解决文章分类页的分页错误问题。
方案三
将如下代码添加到主题functions.php文件中:
add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
if ( is_paged() && is_singular() ) $redirect_url = false;
return $redirect_url;
}
该方案可以成功解决搜索结果分页的问题,但是无法解决文章分类页的分页错误问题。
方案四
将如下代码添加到主题functions.php文件中:
function wphelp_custom_pre_get_posts( $query ) {
if( $query->is_main_query() && !$query->is_feed() && !is_admin() && is_category()) {
$query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) ); } }
add_action('pre_get_posts','wphelp_custom_pre_get_posts');
function wphelp_custom_request($query_string ) {
if( isset( $query_string['page'] ) ) {
if( ''!=$query_string['page'] ) {
if( isset( $query_string['name'] ) ) { unset( $query_string['name'] ); } } } return $query_string; }
add_filter('request', 'wphelp_custom_request');
通过在主题functions.php文件中,添加上述代码的方式,成功的解决了文章分类页分页错误,以及搜索结果页分页错误的问题。上述解决方案的四段代码均来自网络,在此对原作者表示感谢。
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/wordpress/fix-pagination-on-wordpress-archive-pages/