为什么分页会出现问题
假设您有一个名为
wiki
.
现在,当您有如下类别URL时:https://example.com/wiki
(而不是https://example.com/category/wiki
) 并说出页面或帖子URL,如:
https://example.com/a-page
or
https://example.com/category-slug/a-post
WordPress真的无法知道
https://example.com/wiki/page/2
是另一页/帖子的第二页,或类别存档的第二页(因为
wiki
很可能是一个页眉或
page
成为类别下的后鼻涕虫
wiki
).
这是因为WordPress与/page/2
作为不同部分multi-part paginated page or post.
因此,与其加载wiki
类别存档,WordPress将尝试加载带有slug的分页帖子page
你会得到404
(找不到页面)错误,而不是获取类别存档的第二页。
在我为您提供此问题的解决方案之前,首先确保您的永久链接是正确的。
要实现必要的类别URL结构:
您想要的URL结构需要一些工作。因此,除非您已经这样做了,否则请按照以下说明来实现上述URL结构:
# URL structure for Categories
https://example.com/category-slug
为此:
转到:WordPress Admin Panel Menu
→ Settings
.画一个点(.
) 在Category base
文本字段单击保存更改按钮
# URL structure for Posts
https://example.com/category-slug/post-slug
为此:
转到:WordPress Admin Panel Menu
→ Settings
.
选择Custom Structure
并输入/%category%/%postname%/
在Custom Structure
文本字段单击保存更改按钮解决类别分页问题:
一些SEO插件可以解决这个问题。然而,由于这是站点的一个核心URL结构问题,因此最好不要依赖SEO插件。比如,如果你想在将来更改SEO插件,而另一个插件有更好的选项,但没有提供解决方案,该怎么办?
因此,最好使用一个只解决这一个问题的简单插件。您可以使用以下代码并将其以文件名保存在插件目录中category-pagination-fix.php
然后激活名为Category Pagination Fix
从站点的管理面板:
<?php
/*
Plugin Name: Category Pagination Fix
Plugin URI: https://wordpress.stackexchange.com/a/311858/110572
Description: Fix category pagination
Version: 1.0.0
Author: Fayaz Ahmed
Author URI: https://www.fayazmiraz.com/
*/
function wpse311858_fix_category_pagination( $query_string = array() )
{
if( isset( $query_string[\'category_name\'] )
&& isset( $query_string[\'name\'] ) && $query_string[\'name\'] === \'page\'
&& isset( $query_string[\'page\'] ) ) {
$paged = trim( $query_string[\'page\'], \'/\' );
if( is_numeric( $paged ) ) {
// we are not allowing \'page\' as a page or post slug
unset( $query_string[\'name\'] );
unset( $query_string[\'page\'] ) ;
// for a category archive, proper pagination query string is \'paged\'
$query_string[\'paged\'] = ( int ) $paged;
}
}
return $query_string;
}
add_filter( \'request\', \'wpse311858_fix_category_pagination\' );
备选解决方案:当您有如下类别URL时,上述解决方案与分页完美结合:
https://example.com/category-slug/
并发布URL,如:
https://example.com/category-slug/post-slug
但是,如果您有子类别URL,如:
https://example.com/category-slug/sub-category-slug
或者,当您有类似以下的帖子URL时:
https://example.com/post-slug
上述简单的解决方案不起作用。
在这种情况下,您可以使用如下插件Remove Category URL.
这类插件会进行一些基本的URL重写更改,这就是为什么在您使用其中一个插件后,一些默认WordPress行为可能无法按预期工作的原因。所以,使用最适合你的解决方案,但要确保don\'t try to do the same thing in multiple different plugins.
Caution: 使用这些类型的无头存档URL(例如category
或类似的分类页面链接,没有tag
或中的类似术语,用于标记页面链接等)会与页面产生内部冲突;发布URL。WordPress引擎需要进行大量的内部检查,以确定加载哪些,不加载哪些。这一进程需要大量资源。因此,如果你的网站有数千个页面、帖子、类别、标签等,最好在URL中使用这些术语。