【问题标题】:Remove author prefix on WordPress [closed]删除 WordPress 上的作者前缀 [关闭]
【发布时间】:2011-04-07 10:59:15
【问题描述】:

如何删除 WordPress 网站上的作者前缀,我已经快速进行了谷歌搜索,但只找到了我不想使用的 htaccess 重定向。

为了澄清,我想把这个:

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

进入这个

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

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

谢谢

【问题讨论】:

  • 我不建议这样做! /author/ 标签用于命名您的作者。如果您有一个名为“cameron”的页面,删除它会使 WordPress 感到困惑,因为默认情况下页面会自动用于此类永久链接中。
  • 与删除 /category/ 前缀没有什么不同。我的客户提出了这个要求,因为他们希望网址与当前类似 domain.com/cameron/2010/post-title/ 的帖子相匹配,你知道如何删除作者前缀吗?谢谢。
  • “WP No Category Base”插件 (wordpress.org/extend/plugins/wp-no-category-base) 源代码应该为您提供一个良好的起点。基本思想是添加与每个作者姓名匹配的 WP 重写规则。
  • 看过那个插件,似乎是一个超级解决方案。试图编辑它来代替作者前缀,但它只是破坏了我的博客,可能是因为我不是 100% 确定要更改什么(将类别更改为作者似乎不是最好的想法)你或任何人会其他可以帮助修改这个为作者工作吗?谢谢

标签: wordpress url-rewriting


【解决方案1】:

您基本上需要添加 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 中删除“作者”基础。

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 源代码。

【讨论】:

  • 感谢@Cameron,我使用了这段代码,非常完美! :)
【解决方案2】:

请务必替换 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 刷新重写列表。 (否则某些链接可能不起作用)。

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 2021-07-08
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多