如何更改母版页的固定链接结构?

时间:2018-12-15 作者:A. Muller

我使用的页面上的链接进展如下:http://example.com/image/1

我用于函数的代码。php

add_action( \'init\', \'wpse316713_pagination_base_rewrite_rule\' );
function wpse316713_pagination_base_rewrite_rule() {
    global $wp_rewrite;
    $wp_rewrite->pagination_base = \'image\';
}
参考链接:How to change the link structure of the homepage?

我想做的是删除“图像”基。我们如何将其更改为http://example.com/1?

Note:

 $wp_rewrite->pagination_base = \'image\';
如果我在这里删除“image”这个词,它是双重翻转。“//”形。这会导致无法显示页面。就像http://example.com/image/2/1. 我们如何才能完全删除它并仅将其返回到1?

1 个回复
SO网友:nmr

删除分页前缀的步骤page 在主页中,您应该:

添加重写规则,该规则将转换新的链接格式,防止重定向到包含page,paged url的前缀。因此,如果不进行修改,链接将如下所示example.com/3/page/3.

接下来就是重定向。WP根据站点URL将传入链接重定向到正确的URL。由于我们的重写规则example.com/3 url,将显示第三页的结果(paged=3). 但是WP检查正确的urlpaged=3 应该是example.com/3/page/3 这与example.com/3.因此,将进行重定向。

add_action( \'init\', \'se323035_structure\', 25 );
add_filter( \'paginate_links\',       \'se323035_paginate_links\' );
add_filter( \'redirect_canonical\',   \'se323035_redirect_canonical\', 20, 2 );

function se323035_structure()
{
    global $wp_rewrite;
    if ( $wp_rewrite->using_permalinks() )
        add_rewrite_rule( \'([0-9]+)/?$\', \'index.php?&paged=$matches[1]\', \'top\');
}

function se323035_paginate_links( $link )
{
    global $wp_rewrite;
    if ( is_home() && $wp_rewrite->using_permalinks() ) {
        $original = @parse_url( $link );
        $home = @parse_url( home_url(\'/\') );
        if ( ! isset( $original[\'path\'] ) )
            $original[\'path\'] = \'\';

        $original_path = $original[\'path\'];
        $original_path_end = $original[\'path\'];
        if ( isset($home[\'path\']) )
        {
            $home[\'path\'] = trim($home[\'path\']);
            $home[\'path\'] = untrailingslashit($home[\'path\']);
            if ( !empty($home[\'path\']) && $home[\'path\'] != \'/\' )
                $original_path_end = str_replace( $home[\'path\'], \'\', $original[\'path\']);
        }
        //
        // if original url match to our link structure do not redirect to \'/page/{number}\'
        if ( preg_match( \'|^/?[0-9]+/?$|\', $original_path_end) ) {
            $link = home_url( \'/\' );
        }
        elseif ( preg_match( "|/(\\d+/)?$wp_rewrite->pagination_base/\\d+/?$|", $original_path_end) )
            $link = preg_replace( "|/(\\d+/)?$wp_rewrite->pagination_base/(\\d+/?)$|", \'/${2}\', $link );
    }

    return $link;
}

function se323035_redirect_canonical( $redirect_url, $requested_url )
{
    global $wp_rewrite;

    if ( is_home() && !empty($redirect_url) )
    {
        $original = @parse_url( $requested_url );
        if ( ! isset( $original[\'path\'] ) )
            $original[\'path\'] = \'\';

        $original_path = $original[\'path\'];
        $home = @parse_url( home_url(\'/\') );
        if ( isset($home[\'path\']) )
        {
            $home[\'path\'] = trim($home[\'path\']);
            $home[\'path\'] = untrailingslashit($home[\'path\']);
            if ( !empty($home[\'path\']) && $home[\'path\'] != \'/\' )
                $original_path = str_replace( $home[\'path\'], \'\', $original[\'path\']);
        }
        // if original url match to our link structure don\'t redirect to \'/page/{number}\'
        if ( preg_match( \'|^/?[0-9]+/?$|\', $original_path) )
            return \'\';
    }
    return $redirect_url;
}
如果permalink结构设置为,则无法使用新的链接格式/%post_id%.

相关推荐

对“Pages”仪表板中的列进行排序概述

我想按“标题”或自定义列(“层次结构”)在“页面”仪表板中按字母顺序排列页面。基本上,所有页面都分配了一个层次代码(1、1.1、1.1.01、1.1.02等)。当我单击“层次”排序按钮时,结果不正确。有人能给我一个提示或给我指出讨论这个问题的资源吗?下面列出了我的代码。// (Works.) Make custom columns \'prod-hierar\' and \'slug\' sortable add_filter( \'manage_edit-page_sortable_column