修改WordPress作者存档链接
wordpress的里的所有注册用户都有一个专属的链接,称之为作者存档页链接,通常是这样的:
// 未url重写 http://你的域名/?author=1 // 已url重写 http://你的域名/author/admin
其中未url重写的参数值是用户id,而url重写后的参数值是用户名。通常,我们都使用了url重写,访问“http://你的域名/?author=1”,直接暴露了用户名,这可能对wordpress存在安全隐患。所以需要修改存档链接。
方法一:将作者存档链接中的用户名改为昵称
将下面的代码添加到当前主题的 functions.php 中:
/**
* 将WordPress作者存档链接中的用户名改为昵称
* https://www.wpdaxue.com/use-nickname-for-author-slug.html
*/
//使用昵称替换用户名,通过用户ID进行查询
add_filter( 'request', 'wpdaxue_request' );
function wpdaxue_request( $query_vars )
{
if ( array_key_exists( 'author_name', $query_vars ) ) {
global $wpdb;
$author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) );
if ( $author_id ) {
$query_vars['author'] = $author_id;
unset( $query_vars['author_name'] );
}
}
return $query_vars;
}
//使用昵称替换链接中的用户名
add_filter( 'author_link', 'wpdaxue_author_link', 10, 3 );
function wpdaxue_author_link( $link, $author_id, $author_nicename )
{
$author_nickname = get_user_meta( $author_id, 'nickname', true );
if ( $author_nickname ) {
$link = str_replace( $author_nicename, $author_nickname, $link );
}
return $link;
}
接着我们在个人资料中修改昵称为其他名称,如下图,用户 admin的昵称改为了netnote,这样一来,作者存档的链接就自动由 http://域名/author/admin 变成了 http://域名/author/netnote。
此外,记得将“公开显示为”设置为非用户名,这样就OK啦!
访问作者存档页显示如下:
注意:昵称不要包含空格,同时不建议使用中文,作者归档页会出现404,如果是多用户博客,可能会存在昵称相同的情况,这时候只会显示ID较早的用户。
方法二:将作者存档链接中的用户名改为用户ID
将下面的代码添加到当前主题的 functions.php 中:
/**
* 修改url重写后的作者存档页的链接变量
* @since yundanran-3 beta 2
* 2013年10月8日23:23:49
*/
add_filter( 'author_link', 'yundanran_author_link', 10, 2 );
function yundanran_author_link( $link, $author_id) {
global $wp_rewrite;
$author_id = (int) $author_id;
$link = $wp_rewrite->get_author_permastruct();
if ( empty($link) ) {
$file = home_url( '/' );
$link = $file . '?author=' . $author_id;
} else {
$link = str_replace('%author%', $author_id, $link);
$link = home_url( user_trailingslashit( $link ) );
}
return $link;
}
/**
* 为了避免出现404,我们需要修改作者存档页的url重写规则。
* 作者存档页链接有2个查询变量,
* 一个是author(作者用户id),用于未url重写
* 另一个是author_name(作者用户名),用于url重写
* 此处做的是,在url重写之后,把author_name替换为author
* @version 1.0
* @since yundanran-3 beta 2
* 2013年10月8日23:19:13
* @link https://www.wpdaxue.com/use-nickname-for-author-slug.html
*/
add_filter( 'request', 'yundanran_author_link_request' );
function yundanran_author_link_request( $query_vars ) {
if ( array_key_exists( 'author_name', $query_vars ) ) {
global $wpdb;
$author_id=$query_vars['author_name'];
if ( $author_id ) {
$query_vars['author'] = $author_id;
unset( $query_vars['author_name'] );
}
}
return $query_vars;
}
修改之后,在前台输出作者存档页的链接:
get_author_posts_url(1); // =>http://你的域名/author/1
访问“http://你的域名/?author=1”跳转到“http://你的域名/author/1”。




