修复WordPress文章分类页的分页错误

修复WordPress文章分类页的分页错误
修复WordPress文章分类页的分页错误

问题描述

最近,在浏览牛奇网网站的时候,突然发现在访问文章分类页的分页的时候,点击分页会跳转到一篇文章内。我当时认为应该是主题的问题,因为牛奇网使用的是正版“justnews”主题,所以我第一时间联系WPCOM的客服,反馈主题存在BUG。

经过跟客服简单沟通,客服让我通过网站提交工单反馈,提交工单半个多小时候以后,就收到了工单回复(这一点值得称赞)。大意是说我反馈的问题,不是主题导致的问题,而是设置的固定链接的规则造成,给了我两个解决方案,内容如下图所示:

justnews工单回复
justnews工单回复

为了验证是否为主题造成,我将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/

发表评论

登录后才能评论