从URL中删除/Author/slug会产生404

时间:2015-03-11 作者:js111

经过数小时的搜索和尝试不同的功能,我终于成功地从所有用户配置文件URL中删除了/author/。所以它只是/用户名/

然而,当新用户注册他们的个人资料URL时,都会给出404。我可以通过进入永久链接屏幕并单击保存来解决这个问题,但我们注册了很多用户,我不能为每个用户都这样做。

这是我正在使用的函数。。。有什么想法吗!?

谢谢

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

3 个回复
SO网友:Mark Kaplun

你只是做错了。添加每用户重写规则只会使重写“表”膨胀,并减慢URL解析过程。您需要制定一个适用于所有用户的通用重写规则,或者使用“do\\u parse\\u请求过滤器”编写另一个url解析。

你的核心问题是,你现在的URL结构与帖子/类别/等的URL结构“冲突”,最好的方法是为你的用户URL使用一个恒定的可预测前缀/user/{user login}/... 否则,在一个有许多用户的站点中,唯一明智的选择就是自己进行解析。

SO网友:Dave Ross

author_rewrite_rules 仅当WordPress需要重新生成重写规则时才会调用。所以你需要给WordPress一个这样做的理由。在永久链接页面上保存是一种方法。另一种方法是user_register 操作,该操作在创建新用户后立即调用。在处理程序函数中,调用flush_rewrite_rules().

SO网友:lucian

还可以在其他两个类似的提要附近添加此内容,以便重定向提要:

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

结束