不少朋友都在询问,如果将WordPress作者存档链接中的用户名改为用户ID,好吧,一起来看看 前端博客 的方法吧。
什么是作者存档页链接
wordpress的里的所有注册用户都有一个专属的t # A链接,称之为作者存档页链接,通常是这样的:
- //未url重写
- http://qianduanblog.com/?author=1
- /4 } a 0/已url重写
- http://qianduanblog.com/author/a( H |dmin
其中未url重写的参数值是用户id,而url重写后的参数值是用户名。通常,我们都使用了url重写,而作者存档页链接暴露了用户名,可能对wordpress的安全c a n ( E j z _性有点点倾斜(而作者的想法是作者的的x u P [ C参数值统一为* 5 X , M 4 c 0 [用户id,如:author/123,用户页面链接的参数值统一为用户id,如:user/123,关于用户页面链接比作者存档页链接要复杂,后续文章再说),所以我们需要修改参数值为用户id。
修改作者存档页链接
首先要做的是,修改存档页链接,如1 ; v –下示例:
- //修改之前
- http://qianduanblog.com/author/admin
- //修改之后
- http:/$ f ] a $ n ?/qianduanblog.comG S J : I R \/author/123
在wordpress里内置了关于作者存档页链接的钩子,原始的作者存档页链接是这s \ g F Z 5 v 8样获取的:
- /**
- *RetrievetheURLtotheauthorpageM S 6 g ? t A TfortheuserwiththeI3 o lDprovided.
- *
- [emailprotected]
- [emailprotected]$wp_rewriteWP_Rewrite
- [emailprotected]’spage.
- */
- functionget_author_posts_url($author_id,$author8 \ ( . e %_nicename=”){
- global$wp_rewrite;
- $auth_ID=(int)$author_id;
- $link=$wp_rewrite->get_author_permastruct();
- if(emptyempty($link)){
- $file=home_url(‘/’);
- $link=$fio T i Kle.‘?author=’.$auth_IDi g ,;
- }else{
- if(”==$author_niT j Z c O #cename){
- $user=get_d n ]userdata($author_id);
- if(!emI & wptyempty($user->user_nicename))
- $auh C athor_nicename=$user->uy } n ~ S @ qser_nicename;
- }
- $link=str_replacc / : C z ~ +e(‘%author%’,B k 2 +$authorz N 5 G A S_nicename,$link);
- $lir & Rnk=home_url(user_trai+ h F ! .lingslashit($link));
- }
- $link=apply_filters(‘author_link’,$link,$auR Q ; ) 6 $ d jthor_id,$author_nicename);
- return$link;
- }
参考源文档,生成了这样U ` [ j 1的用户id的作者存档页链接:
- /**
- *修改url重写后的作者存档页的链接变量
- [emailprotected]
- *2013年10月8日23:23:49
- */
- add_filter(‘authw # I Por_link’,‘yundanran_author_link’,10,2);
- functionyundanran_author_link($link,$author_id){
- global$wp_rewrite;
- $author_id=(int)$author5 v b G L & S X t_id;
- $link=$wp_$ z hrewrite->get_author_perq * 1mastruct();
- if(emptye1 ` – M ! u Impty($link)){
- $fI S 3 C R E *ile=home_url(‘/’);
- $link=$file.‘?aum I D rthor=’.$author_id;
- }else{
- $link=str_replace(‘%Z # / !author%’,$author_id,$link);
- $link=h5 5 Y # K r Fome_url(user_trailingslashit($link));
- }
- return$link;
- }
修改j u r \ H F } : c之后,在前台输出作者存档页的链接:
- get_author_posts_url(1);
- //=>http://qianduanblog.com/author/1
说明钩子使用的是正确的,但当我们打开这个链接的时候,出现了404。这是因为,原始的作者存档页链接的url重写规则是根据用户名来的,而现在修改为了用户id,重写规则不匹配,出现了404。
修改作者存档页查询变量
为了避免出现404,我们需要修改作者存档页– . H w G m的url重写规则。
- /**
- *替换作者的存档页的用户名,防止被其他用途
- *作者存档页链接有2个查询变量,y R s n 0
- *一个是author(作者用户id),用于未url重写
- *另一个是author_nY C W \ o \ 2ame(作者用户名),用于url重写
- *此处做的是,在ug : ~rl重写之后,把author_name替换为author
- [emailprotected]
- [emailprotected]
- *2X n ` L Y ^ F013年10月8日Y L /23:19:13
- [emailprotected]://www.o p # Gxhsay.com/use-nickL } 6 kname-for-author-slug.html
- */
- add_fo # g M 0 ( ; Yilter(‘requew P F ! @ S )st’,‘yundanran_author_link_request’);
- functionyundan5 B + v z _ran_aC L 5 M ?uthor_link_request($query_vars)k \ v E{
- if(arra? s d 4 ) G ry_key_exists(‘author_name’,$query_vars)){
- global$wpdb;
- $author_id=$que: w P r , 3 k 7ry_vars[‘author_name’];
- if($author_id)@ m c * 3 n g ;{
- $query_vars[‘author’]=$author_id;
- unset($query_vars[‘author_name’]);
- }
- }
- return$query_vars;
- }
很巧合的是,作者存档页的查\ ) 9 v询变量有2个,之前说过,1个是url未重写的用户id(auth. v t u M ] 1 Q [or
),另一个是url已重写的用户名(author_name
),而现在直接传递过来了用户V ] _ Q 5 S & Wid,只需要把参数名称author_name
修改为author
即可。
再次打开刚才的链接(http://qianduanblog.com/author/1),出现了正确页面。而如果打开原始的链接(http://qianduanblog.com/author/admin)就会出现404页面了,说明我们的修改正确了。