如何在WordPress中删除作者基础

时间:2014-03-01 13:39:06

标签: wordpress rewrite

WordPress中的标准作者链接如下所示:example.com/author/johnsmith

我想删除网址的author/部分,以便用户名在根目录中。例如:example.com/johnsmith

我在我的网站上控制页面创建,因此页面和作者姓名不会发生冲突。

到目前为止,我已经尝试了WP Snippet的以下解决方案,但这似乎不再起作用了:

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;
}


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;
}

有人知道是否有解决方案吗?

6 个答案:

答案 0 :(得分:4)

我已经测试了这个组合解决方案,但在重新生成永久链接之前没有工作。你可以这样做,就像brasfolio描述的那样:只需点击仪表板中永久链接页面上的保存即可。

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;
}

if( !is_admin() ) {
add_action('init', 'author_rewrite_so_22115103');
}

function author_rewrite_so_22115103() {
   global $wp_rewrite; 
   if( 'author' == $wp_rewrite->author_base ) $wp_rewrite->author_base = null;
}

答案 1 :(得分:2)

您的代码显示正常。手动刷新永久链接结构以反映这些更改。

1)  Settings -> Permalinks -> choose default -> Save
2)  Revert the settings to original.

答案 2 :(得分:1)

尝试:RedirectMatch 301 ^ / author /(.+)$ http://www.yourblog.com/ $ 1

这将进入你的.htaccess

答案 3 :(得分:0)

还要将其添加到其他类似的两个附近,以便重定向Feed:

$author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';

答案 4 :(得分:0)

似乎我们必须刷新永久链接结构,但每次有人注册新规则。

因此尝试使用以下方法自动刷新它:

print_r

functions.php 文件中。

我有同样的问题,但有了这个似乎没问题。 但是仍然存在与页面和页面冲突的问题。邮寄名称。

答案 5 :(得分:-1)

此问题类似于this question ...

您可以执行This之类的操作。 这几乎就是你想要的......

希望这会有用......