Cambiar el Slug de Autor de Nombre de Usuario a Apodo

11

Hola a la comunidad,
¿es posible cambiar la barra de nombre de usuario predeterminada a apodo si está disponible?

Por defecto, la url es algo como: enlace ),
es posible volver a escribir y cambiar a enlace ) por lo que si un usuario cambia su apodo de la página de perfil, la bala también cambiará al nuevo nombre dado por el usuario?

muchas gracias!
Philip

    
pregunta Philip 21.12.2010 - 21:14

3 respuestas

16

Veo dos formas de resolver este problema: cambiar los datos que forman la URL del autor o cambiar la URL del autor. Es probable que también deba manejar las redirecciones, por lo que las URL antiguas a los archivos de usuarios siguen funcionando cuando un usuario cambia su apodo.

Cambiando la URL del autor

Hay dos partes en esta pregunta: maneje los enlaces entrantes con el apodo del autor en lugar de la bala del autor, y genere las direcciones URL de publicación del autor con el apodo en lugar de la bala estándar.

La primera parte se resuelve enganchándola al filtro request , verificando si se trata de una solicitud de autor y buscando al autor por apodo en lugar de babosa. Si encontramos un autor, cambiamos los parámetros de consulta para usar el ID de 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;
}

La segunda parte se realiza conectando el filtro author_link y reemplazando la parte estándar del autor (indicada por $author_nicename ) con el apodo.

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

Cambiando los datos que forman la URL del autor

Una forma tal vez más fácil sería actualizar el campo user_nicename de lo contrario no utilizado en la base de datos. Creo que se genera desde el inicio de sesión del usuario y nunca se cambia después de eso. Pero no soy un experto en administración de usuarios, así que úselo bajo su propio riesgo.

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

Utilice este complemento: enlace

Aunque no ha sido probado para 3.2.1. Lo he estado usando sin ningún problema.

Si recibe un error de encabezado al activar el complemento, encontrará una solución aquí: enlace

    
respondido por el Dominor Novus 20.11.2011 - 18:07
-3

una forma fácil es el plugin Autor Slug

También puedes usar código pequeño:

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

Lea otras preguntas en las etiquetas