更改/移除 WordPress 作者存档页面的前缀 “author”


WordPress 文章作者的存档页面地址都是类似 https://domain.com/author/wordpressmi 这样的,在用户名前面会添加“author”前缀。

更改作者存档前缀 author

比如将 https://domain.com/author/wordpressmi 修改为 https://domain.com/u/wordpressmi 样式,并且支持作者存档页面的 Feed 输出。

将下面的代码添加到当前主题的 functions.php 即可:

//更改作者存档前缀 
add_action('init', 'change_author_base');
function change_author_base() {
    global $wp_rewrite;
    $author_slug = 'u'; // 更改前缀为 u
    $wp_rewrite->author_base = $author_slug;
}

移除作者存档前缀 author

将原来的 https://domain.com/author/wordpressmi 修改为 https://domain.com/wordpressmi ,并且支持作者存档页面的 Feed 输出。

//通过 author_rewrite_rules 钩子添加新的重写规则
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb;
    $author_rewrite = array();
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");    
    foreach($authors as $author) {
    	$author_rewrite["({$author->nicename})/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$"] = 'index.php?author_name=$matches[1]&feed=$matches[2]'; // 作者存档的feed输出
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }   
    return $author_rewrite;
}
 
// 通过 author_link 钩子移除前缀 author
add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}

注意

如果添加代码后,访问新的存档地址出现 404 错误,请访问 WP后台 > 设置 > 固定链接,重新保存一次即可。


<< 将 WordPress 作者存档页链接中的用户名改为昵称或ID 使用 WordPress 原生函数获取当前页面 URL >>