C'est un peu délicat, car il sanitize_user
permet des espaces dans les noms d'utilisateur, ce qui signifie qu'il est difficile d'éviter de saisir l'intégralité de la phrase «@johndoe a dit que ...» par opposition au seul nom d'utilisateur réel «@johndoe» et vous n'avez pas de séparateur à la fin qui Aidez-moi. Pour éviter cela, j'ai imposé 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 de peaufinage de l'expression régulière. Et je pense que vous feriez mieux avec un shortcode , mais voilà .
Remarque: Il m'est venu à l'esprit que ce site a une fonctionnalité similaire à une mention. Lorsque vous écrivez un commentaire, vous pouvez informer les autres utilisateurs en écrivant "@nomutilisateur", mais les noms d'utilisateur ici peuvent avoir des espaces comme avec WordPress. Le problème des "espaces" ici 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 l'approche du problème.