将作者slug从用户名更改为昵称

时间:2010-12-21 作者:Philip

大家好,
如果可用,是否可以将默认用户名slug更改为昵称?

默认情况下,url类似于:http://domain.tld/author/(admin) ,
是否可以重写并更改为http://domain.tld/author/(nickname) 那么,如果用户在个人资料页面上更改昵称,slug也会更改为用户指定的新名称?

非常感谢<菲利普

3 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

我看到了两种解决此问题的方法:更改构成作者URL的数据,或更改作者URL。您可能也应该处理重定向,这样当用户更改其昵称时,用户存档的旧URL会继续工作。

更改作者URL这个问题有两个部分:使用作者昵称而不是作者slug来处理传入链接,以及使用昵称而不是标准slug来生成作者帖子URL。

第一部分通过钩住request 过滤,检查它是否是作者请求,并按昵称而不是slug查找作者。如果找到作者,我们将更改查询参数以使用作者ID。

add_filter( \'request\', \'wpse5742_request\' );
function wpse5742_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;
}
第二部分是通过钩住author_link 过滤并替换标准编写器部件(由$author_nicename) 用昵称。

add_filter( \'author_link\', \'wpse5742_author_link\', 10, 3 );
function wpse5742_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;
}
更改构成作者URL的数据可能更简单的方法是更新其他未使用的user_nicename 数据库中的字段。我认为它是从用户登录生成的,之后再也没有更改过。但我不是用户管理方面的专家,所以使用它的风险自负。

add_action( \'user_profile_update_errors\', \'wpse5742_set_user_nicename_to_nickname\', 10, 3 );
function wpse5742_set_user_nicename_to_nickname( &$errors, $update, &$user )
{
    if ( ! empty( $user->nickname ) ) {
        $user->user_nicename = sanitize_title( $user->nickname, $user->display_name );
    }
}

SO网友:Dominor Novus

使用此插件:http://wordpress.org/extend/plugins/display-name-author-permalink/

虽然没有针对3.2.1进行测试。我一直在使用它,没有任何问题。

如果激活插件时收到标题错误,您将在此处找到修复:http://wordpresscloaker.com/blog/how-to-fix-wordpress-plugin-does-not-have-a-valid-header-error.html

SO网友:bueltge

一个简单的方法是plugin Author Slug

您还可以使用小代码:

add_action(\'init\', \'set_new_author_base\');
function set_new_author_base() {
    global $wp_rewrite;
    $author_slug = \'new_slug\';
    $wp_rewrite->author_base = $author_slug;
}

结束

相关推荐

Get term SLUG by term ID

我有一个等级分类法叫做“tarefa”我必须显示子分类法中的所有帖子。我曾经get_term_children function 函数验证分类法父级是否具有子级。如果分类法父级有子级,我将按分类法子级查询帖子。问题是:我必须按分类法slug查询帖子,但函数get\\u term\\u children返回一个分类法ID数组。问题是:如何通过分类ID返回分类slug?