设置WordPress作者名称链接改成数字ID的URL格式

有网友希望将WordPress作者名称URL别名的改成ID。当然默认其实也蛮好的,既然你有需要,就可以改了试试。

// 修改之前
http://itbulu.com/author/admin 
// 修改之后
http://itbulu.com/author/123

在wordpress里内置了关于作者存档页链接的钩子,原始的作者存档页链接是这样获取的:

/**
 * Retrieve the URL to the author page for the user with the ID provided.
 *
 * @since 2.1.0
 * @uses $wp_rewrite WP_Rewrite
 * @return string The URL to the author's page.
 */
function get_author_posts_url($author_id, $author_nicename = '') {
	global $wp_rewrite;
	$auth_ID = (int) $author_id;
	$link = $wp_rewrite->get_author_permastruct();

	if ( empty($link) ) {
		$file = home_url( '/' );
		$link = $file . '?author=' . $auth_ID;
	} else {
		if ( '' == $author_nicename ) {
			$user = get_userdata($author_id);
			if ( !empty($user->user_nicename) )
				$author_nicename = $user->user_nicename;
		}
		$link = str_replace('%author%', $author_nicename, $link);
		$link = home_url( user_trailingslashit( $link ) );
	}

	$link = apply_filters('author_link', $link, $author_id, $author_nicename);

	return $link;
}

我们修改成:

add_filter( 'author_link', 'wp_author_link', 10, 2 );
function wp_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;
}

修改之后,在前台输出作者存档页的链接:

get_author_posts_url(1);
// =>http://itbulu.com/author/1

修改作者存档页查询变量

为了避免出现404,我们需要修改作者存档页的url重写规则。

add_filter( 'request', 'wp_author_link_request' );
function wp_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;
}

很巧合的是,作者存档页的查询变量有2个,之前说过,1个是url未重写的用户id(author),另一个是url已重写的用户名(author_name),而现在直接传递过来了用户id,只需要把参数名称author_name修改为author即可。 再次打开刚才的链接(http://itbulu.com/author/1),出现了正确页面。而如果打开原始的链接(http://itbulu.com/author/admin)就会出现404页面了,说明我们的修改正确了。

投上你的一票

本文出处:老蒋部落 » 设置WordPress作者名称链接改成数字ID的URL格式 | 欢迎分享( 公众号:老蒋朋友圈 )

公众号 「老蒋朋友圈」获取站长新知 / 加QQ群 【1012423279】获取商家优惠推送