重复类别和页面URL加载类别而不是页面

时间:2018-07-12 作者:Thien Sư

我用slug创建了一个类别service, 具有永久链接:https://example.com/service.

以及带有以下链接的页面:https://example.com/service.

在类别中service, 有一篇帖子链接如下:https://example.com/service/post1

现在链接https://example.com/service 正在重定向到类别存档,但我希望它改为加载页面。

我该怎么做?

1 个回复
最合适的回答,由SO网友:Fayaz 整理而成

负载PagePage 和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 MenuSettings..) 在Category base 文本字段


# URL structure for Posts
https://example.com/category-slug/post-slug
为此:

转到:WordPress Admin Panel MenuSettings.

  • 选择Custom Structure 并输入/%category%/%postname%/Custom Structure 文本字段如果由于某种原因,您无法从中获得预期的结果,请在WordPress安装中使用此URL结构,包括:

    WordPress Core更新至最新版本Twentyseventeen 被激活,然后查看重复页面和类别URL的情况。

    解决类别分页问题:

    如果check this post 您将看到,这种URL结构将在类别归档页面中导致一些分页问题。这是因为WordPress与/page/2 作为不同的页面或帖子分开。

    例如:假设您有一个名为serviceservice 类别有如下帖子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 那有子弹postservice 类别和该帖子是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\' );
    

  • 结束