web-dev-qa-db-fra.com

WordPress Internal @ Mentions

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.

8
AndrettiMilas

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.

13
s_ha_dum

Regardez le thème P2. Il fait cela en les appelant "Mentions".

http://themes.svn.wordpress.org/p2/1.4.2/inc/mentions.php

4
Otto