WordPress Internal @ Mentions


8

Sto cercando un modo per collegarti alle pagine dell'autore all'interno di un'installazione di WordPress semplicemente mettendo il simbolo @ davanti al nome utente di una persona in un post .... proprio come su Twitter.

Esempio:

Se il nome utente è "Bill256" e scrivo "@ Bill256" sarà collegato alla sua pagina autore.

Risposte:


13

Questo è un po 'complicato perché sanitize_userconsente spazi nei nomi utente, il che significa che è difficile evitare di afferrare l'intera frase' @johndoe detto che ... 'al contrario del solo nome utente effettivo' @johndoe 'e alla fine non hai un separatore che potrebbe Aiuto. Per evitare ciò, ho imposto l'obbligo di sostituire gli spazi nel nome utente con '+'.

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 );

Non mi aspetto che questa soluzione sia molto robusta, non senza un sacco di modifiche al regex. E penso che staresti meglio con uno shortcode , ma il gioco è fatto.

Nota: mi è venuto in mente che questo sito ha una funzionalità simile a una menzione simile. Quando scrivi un commento, puoi avvisare gli altri utenti scrivendo "@username" ma i nomi utente qui possono avere spazi come con WordPress. Il problema "spazi" qui è stato risolto richiedendo che gli spazi fossero semplicemente rimossi , anziché sostituiti con segni "+". Questo potrebbe essere un altro modo per risolvere il problema.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.