Mude o Autor Slug de Nome de Usuário para Apelido

11

Oi para a comunidade,
é possível alterar o slug de nome de usuário padrão para o apelido se estiver disponível?

Por padrão, o URL é algo como: enlace ),
é possível reescrever e mudar para enlace ) assim, se um usuário mudar seu apelido na página de perfil, o slug também será alterado para o novo nome dado pelo usuário?

muito obrigado!
Philip

    
por Philip 21.12.2010 / 21:14

3 respostas

16

Vejo duas formas de resolver este problema: alterar os dados que formam o URL do autor ou alterar o URL do autor. Provavelmente, você também deve gerenciar redirecionamentos, portanto, as URLs antigas dos arquivos de usuários continuarão funcionando quando um usuário alterar seu apelido.

Alterando o URL do autor

Há duas partes nesta questão: manipular links de entrada com o apelido do autor em vez do slug do autor e gerar urls de postagem do autor com o apelido em vez do slug padrão.

A primeira parte é resolvida conectando-se ao filtro request , verificando se é uma solicitação do autor e pesquisando o autor pelo apelido em vez do slug. Se encontrarmos um autor, alteramos os parâmetros de consulta para usar o ID do autor.

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;
}

A segunda parte é feita conectando-se ao filtro author_link e substituindo a parte do autor padrão (indicada por $author_nicename ) pelo apelido.

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;
}

Alterando os dados que formam o URL do autor

Uma maneira talvez mais fácil seria atualizar o campo user_nicename não utilizado no banco de dados. Eu acho que é gerado a partir do login do usuário e nunca mudou depois disso. Mas não sou especialista em gerenciamento de usuários, portanto, use-o por sua conta e risco.

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 );
    }
}
    
por Jan Fabry 07.01.2011 / 14:58
1

Use este plugin: enlace

Embora não seja testado para o 3.2.1. Eu tenho usado isso sem nenhum problema.

Se você receber um erro de cabeçalho ao ativar o plug-in, encontrará uma correção aqui: enlace

    
por Dominor Novus 20.11.2011 / 18:07
-3

um jeito fácil é o plugin Author Slug

Além disso, você pode usar um código pequeno:

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;
}
    
por bueltge 22.12.2010 / 01:08