在WordPress上删除作者前缀

时间:2010-09-02 16:54:57

标签: wordpress url-rewriting

如何在WordPress网站上删除作者前缀,我已经快速完成了Google,但只发现了我不想诉诸的htaccess重定向。

澄清我想转此:

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

进入这个

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

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

由于

2 个答案:

答案 0 :(得分: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;
}

该插件的另一个关键部分是一个挂钩到author_link过滤器的函数,并从返回的URL中删除“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;
}

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

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

答案 1 :(得分:1)

请务必在no_author_base_rewrite_rules()中替换这段代码:

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]';

  $rules = get_option( 'rewrite_rules' );
  if ( ! isset( $rules['({$author->nicename})/?$'] ) ) {
    global $wp_rewrite;
      $wp_rewrite->flush_rules();
  }
}

以便Wordpress刷新重写列表。 (否则某些链接可能无效)。