WordPress Internal @ Mentions


8

Je cherche un moyen de créer un lien vers des pages d'auteur dans une installation WordPress simplement en plaçant le symbole @ devant le nom d'utilisateur d'une personne dans un message .... tout comme sur Twitter.

Exemple:

Si le nom d'utilisateur est "Bill256" et que j'écris "@ Bill256", il sera lié à sa page d'auteur.

Réponses:


13

C'est un peu délicat, car il sanitize_userpermet 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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.