Alterar a lesma do autor de nome de usuário para apelido


13

Olá à comunidade,
é possível alterar a opção padrão de nome de usuário para apelido, se estiver disponível?

Por padrão, o URL é algo como: http: //domain.tld/author/ (admin ),
é possível reescrever e mudar para http: //domain.tld/author/ (apelido ), portanto, se um usuário alterar seu apelido a partir da página de perfil a lesma mudará também para o novo nome dado pelo usuário?

Muito obrigado!
Philip


Eu não acho que você possa realisticamente, não há query_var que encontre postagens com base no apelido de um usuário; portanto, não há variável apropriada para mapear o apelido em uma regra de reescrita. Você precisaria adicionar sua própria manipulação de var de consulta para lidar com consultas de apelido juntamente com qualquer código de reescrita (é possível em teoria, mas acho que não seria elegante na prática).
T31os

Respostas:


16

Vejo duas maneiras de resolver esse problema: alterando os dados que formam o URL do autor ou alterando o URL do autor. Você provavelmente também deve lidar com redirecionamentos, para que URLs antigos para arquivos do usuário continuem funcionando quando um usuário altera seu apelido.

Alterando o URL do autor

Há duas partes nessa pergunta: manipule os links recebidos com o apelido do autor em vez da slug do autor e gere URLs de postagem do autor com o apelido, em vez da slug padrão.

A primeira parte é resolvida conectando-se ao requestfiltro, verificando se é uma solicitação de autor e procurando o autor por apelido, em vez de 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 o author_linkfiltro 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 user_nicenamecampo não utilizado no banco de dados. Eu acho que é gerado a partir do login do usuário e nunca mudou depois disso. Mas eu 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 );
    }
}

Ótima solução. Ainda não o verifiquei, mas acho que sua abordagem é realmente boa.
Anh Tran

E os nomes de nicho dos autores duplicados? Precisamos nos preocupar com isso ou o WP cuida disso?
Tirou Baker

Como o @DrewBaker disse, pode haver um problema com URLs duplicados se dois perfis de usuário tiverem nomes semelhantes. Digamos que se um usuário 1 editou seu nome de usuário como John e houver outro usuário com nome semelhante, os dois perfis de usuário terão um URL de autor único como site.com/author/john. Você pode me dizer se há uma correção para isso?
Netizen

Além disso, se houver um espaço entre o nome, o URL não funcionará. Isso acontece com os nomes de usuário aleatórios criados com este código. Quando tentei o código, ele gerou nomes de usuário aleatórios como Novo usuário 654937 e o URL do autor se parece com site.com/author/Newuser654937/. Esse URL não funcionará até que alteremos novamente o nome do perfil e removamos os espaços. Você pode sugerir uma solução?
você está

@IamSJ: Não há prevenção automática contra nomes duplicados ou caracteres inválidos. Você terá que fornecer isso sozinho. Provavelmente o mais fácil se você fizer isso pela segunda maneira, alterando o "nicename".
Jan Fabry


-3

uma maneira fácil é o plugin Author Slug

Além disso, você pode usar 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;
}

3
Infelizmente, não é a base de autores que o usuário deseja alterar.
T31os
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.