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;
}
有人知道是否有解决方案吗?
答案 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)