将WordPress作者存档链接中的用户名改为用户ID

 5年前     1.2K  

文章目录

将WordPress作者存档链接中的用户名改为用户ID

wordpress的里的所有注册用户都有一个专属的链接,称之为作者存档页链接,通常是这样的:http://www.iowen.cn/author/admin。这样作者存档页链接暴露了用户名,可能对wordpress的安全性有点点隐患,所以我们需要修改参数值为用户id。

修改方法

在主题 functions.php 中加入以下代码:

/**
* 修改url重写后的作者存档页的链接变量
*/
add_filter('author_link', 'author_link', 10, 2);
function 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;
}

/**
* 替换作者的存档页的用户名,防止被其他用途
* 作者存档页链接有2个查询变量,
* 一个是author(作者用户id),用于未url重写
* 另一个是author_name(作者用户名),用于url重写
* 此处做的是,在url重写之后,把author_name替换为author
*/
add_filter('request', 'author_link_request');
function 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;
}

修改之后作者存档页链接就是:http://www.iowen.cn/author/123,管理员用户名就隐藏了。你的管理员ID编号可能是 1 ,你也可以修改一下这个编号。

修改管理员ID编号

最直接的方法是操作数据库,在修改之前请先备份好数据库。WordPress 储存用户数据是在 wp_users 和 wp_usermeta 两个表中(wp_ 为数据库前缀),我们需要直接修改这两个表中的数据。除此之外,我们还必须修改文章作者的 post_author,不然就会导致文章作者信息出错;因为评论也会记录已登录的作者 user_id,所以评论的用户 ID 也要一起修改。综上所述,我们大致需要执行下面几条 SQL 语句:(记得修改为自己的数据库前缀)

UPDATE wp_users SET ID = 2 WHERE ID = 1;
UPDATE wp_usermeta SET user_id = 2 WHERE user_id = 1;
UPDATE wp_posts SET post_author = 2 WHERE post_author = 1;
UPDATE wp_comments SET user_id = 2 WHERE user_id = 1;

SQL 执行后的效果为:把用户 id=1 修改成 id=2。

当然如果你还有其它插件或功能关联过用户 ID,那么修改方面同样很简单,找到对应的数据表,然后将字段对应做修改就可以了,因为子凡做二次开发的时候就是这样,以上 SQL 语句只是一个最基本的修改。

版权声明:一为 发表于 5年前,共 1560 字。
转载请注明:将WordPress作者存档链接中的用户名改为用户ID | 一为忆

您可能感兴趣的

暂无评论

暂无评论...