Bonjour à la communauté
Est-il possible de changer le nom d'utilisateur par défaut slug en pseudo si est disponible?
Par défaut, l’URL ressemble à ceci: http: //domain.tld/author/ (admin ),
Est-il possible de réécrire et de changer en http: //domain.tld/author/ (pseudo ) donc si un utilisateur change son pseudo depuis la page de profil, le slug sera également remplacé par le nouveau nom donné par l'utilisateur?
merci beaucoup!
Philippe
Je vois deux façons de résoudre ce problème: modifier les données constituant l'URL de l'auteur ou modifier l'URL de l'auteur. Vous devriez probablement aussi gérer les redirections. Ainsi, les anciennes URL des archives des utilisateurs continuent de fonctionner lorsqu'un utilisateur change de pseudonyme.
Cette question comporte deux parties: gérer les liens entrants avec le pseudo de l'auteur au lieu du slug de l'auteur, et générer des URL de publication pour l'auteur avec le pseudo au lieu du slug standard.
La première partie est résolue en raccordant le filtre request
, en vérifiant s’il s’agit d’une demande d’auteur et en recherchant l’auteur par pseudonyme au lieu de slug. Si nous trouvons un auteur, nous modifions les paramètres de la requête pour utiliser l'identifiant de l'auteur.
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 deuxième partie se fait en s’accrochant au filtre author_link
et en remplaçant la partie auteur standard (indiquée par $author_nicename
) par le pseudonyme.
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;
}
Un moyen peut-être plus simple consiste à mettre à jour le champ user_nicename
autrement utilisé dans la base de données. Je pense qu'il est généré à partir de la connexion de l'utilisateur et n'a jamais changé par la suite. Mais je ne suis pas un expert en gestion des utilisateurs, utilisez-le à vos risques et périls.
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 );
}
}
Utilisez ce plugin: http://wordpress.org/extend/plugins/display-name-author-permalink/
Bien que ce ne soit pas testé pour 3.2.1. Je l'utilise sans problème.
Si vous recevez une erreur d’en-tête lors de l’activation du plugin, vous trouverez une solution ici: http://wordpresscloaker.com/blog/how-to-fix-wordpress-plugin-does-not-have-a-valid -header-error.html