WordPress Interno @ Menções

8

Estou procurando uma maneira de criar um link para as páginas de autor em uma instalação do WordPress, simplesmente colocando o símbolo @ na frente do nome de usuário de uma pessoa em um post .... assim como no twitter.

Exemplo:

Se o nome de usuário for "Bill256" e eu escrever "@ Bill256", ele será vinculado à página do autor.

AndrettiMilas
fonte

Respostas:

13

Isso é um pouco complicado, porque sanitize_userpermite espaços nos nomes de usuários, o que significa que é difícil evitar pegar a frase inteira '@johndoe disse isso ...' em vez de apenas o nome de usuário real '@johndoe' e você não tem separador no final. Socorro. Para evitar que eu imponha a exigência de que espaços no nome de usuário sejam substituídos por '+'.

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

Eu não esperaria que esta solução fosse muito robusta, não sem muitos ajustes no regex. E acho que você estaria melhor com um código curto , mas lá está.

Nota: Ocorreu-me que este site possui uma funcionalidade semelhante a menção. Ao escrever um comentário, você pode notificar outros usuários escrevendo "@username", mas os nomes de usuário aqui podem ter espaços, como no WordPress. O problema dos "espaços" aqui foi resolvido exigindo que os espaços fossem apenas removidos , em vez de substituídos por sinais "+". Essa poderia ser outra maneira de resolver a abordagem do problema.

s_ha_dum
fonte