Je cherche un moyen de créer un lien vers les pages de l'auteur au sein d'une installation WordPress en plaçant simplement le symbole @ devant le nom d'utilisateur d'une personne dans un message, comme sur Twitter.
Exemple:
Si le nom d'utilisateur est "Bill256" et que j'écris "@ Bill256", il sera lié à la page de son auteur.
C'est un peu délicat car sanitize_user
laisse des espaces dans les noms d'utilisateurs, ce qui signifie qu'il est difficile d'éviter de saisir la phrase entière '@johndoe a dit ...' par opposition simplement le nom d'utilisateur '@johndoe' et vous n'avez pas de séparateur à la fin qui pourrait vous aider. Pour éviter que je impose une exigence que les espaces dans le nom d'utilisateur soient remplacés par "+".
function look_for_author($login) {
if (!empty($login[1])) {
$lname = str_replace('+',' ',$login[1]);
$user = get_user_by('login',$lname);
if (!empty($user)) return ' <a href="'.get_author_posts_url($user->ID).'">'.$lname.'</a> ';
}
return ' '.$login[0].' ';
}
function hyperlink_authors( $content ){
$content = preg_replace_callback(
'/[\s>]+@([A-Za-z0-9_.\-*@\+]+)[^A-Za-z0-9_.\-*@\+]/',
'look_for_author',
$content
);
return $content;
}
add_filter( 'the_content', 'hyperlink_authors', 1 );
Je ne m'attendrais pas à ce que cette solution soit très robuste, non sans beaucoup d'ajustements de la regex. Et je pense que vous seriez mieux avec un shortcode , mais voilà.
Remarque: je me suis rendu compte que ce site a une fonctionnalité semblable à une mention. Lorsque vous écrivez un commentaire, vous pouvez avertir les autres utilisateurs en écrivant "@nomutilisateur", mais les noms d'utilisateur utilisés ici peuvent comporter des espaces, comme avec WordPress. Le problème des "espaces" a été résolu en , exigeant que les espaces soient simplement supprimés , plutôt que remplacés par des signes "+". Cela pourrait être une autre façon de résoudre le problème.
Regardez le thème P2. Il fait cela en les appelant "Mentions".