在WordPress上删除作者前缀

Cam*_*ron 0 wordpress url-rewriting

如何在WordPress网站上删除作者前缀,我已经做了一个快速谷歌,但只找到了我不想诉诸的htaccess重定向.

澄清我想转此:

http://www.domain.com/author/cameron/

进入这个

http://www.domain.com/cameron/

我不想使用任何类型的任何重定向,但我可以在functions.php文件中使用实际的PHP代码,因为我希望网站上所有使用作者内容的链接自动更新而不保留原始链接然后重定向到新的.

谢谢

Ric*_*d M 8

您基本上需要添加WP重写规则以匹配所需形式的每个用户的名称.这就是WP No Category Base对类别的作用,因此我的答案中的大多数代码都是从该插件改编而来的.

插件的主要部分是一个挂钩到author_rewrite_rules过滤器并替换作者重写规则的函数.这将检索所有用户名并专门为每个用户添加重写规则(以下将不处理提要,因此如果需要,请查看WP No Category Base源).

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})/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;
}
Run Code Online (Sandbox Code Playgroud)

插件的另一个关键部分是一个挂钩到author_link过滤器并从返回的URL中删除"作者"基础的函数.

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;
}
Run Code Online (Sandbox Code Playgroud)

请参阅此要点:http://gist.github.com/564465

这不会处理旧样式作者URL的重定向,如果需要,请参阅WP No Category Base源.