负载Page
当Page
和aCategory
存档具有相同的URL:
This is default WordPress behaviour: 当类别存档具有相同的URL时;对于页面,WordPress将加载页面而不是类别存档。
因此,除非您有一个插件为您的WordPress设置更改此行为,否则您的重复URL应该加载页面,而不是类别存档。
要获得正确的URL结构:
需要对想要的URL结构进行一些工作。因此,除非您已经这样做了,否则请按照以下说明来实现上述URL结构:
# URL structure for Pages:
https://example.com/page-slug
默认情况下会发生这种情况,您无需执行任何操作。
<小时>
# 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
文本字段单击保存更改按钮如果由于某种原因,您无法从中获得预期的结果,请在WordPress安装中使用此URL结构,包括:
WordPress Core更新至最新版本没有激活插件,默认主题如下Twentyseventeen 被激活,然后查看重复页面和类别URL的情况。
解决类别分页问题:
如果
check this post 您将看到,这种URL结构将在类别归档页面中导致一些分页问题。这是因为WordPress与
/page/2
作为不同的页面或帖子分开。
例如:假设您有一个名为service
和service
类别有如下帖子web development
, hosting
等等,使用以下URL:
https://example.com/service
https://example.com/service/web-development
https://example.com/service/hosting
现在,您的
service
类别argive页,如:
https://example.com/service
https://example.com/service/page/2
https://example.com/service/page/3
由于这种URL结构,WordPress认为您正在尝试加载
a post 那有子弹
post
在
service
类别和该帖子是
paginated post.
因此,与其加载service
类别存档,WordPress将尝试加载带有slug的分页帖子page
你会得到404
(找不到页面)错误。
要解决此问题,可以使用带有以下代码的简单插件:
<?php
/*
Plugin Name: Category Pagination Fix
Plugin URI: https://wordpress.stackexchange.com/a/308826/110572
Description: Fix category pagination for possible conflicts with page or post url
Version: 1.0.0
Author: Fayaz Ahmed
Author URI: https://www.fayazmiraz.com/
*/
function wpse308326_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\', \'wpse308326_fix_category_pagination\' );