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.

AndrettiMilas
la source

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.

s_ha_dum
la source