WordPress Internal @ Menciones


8

Estoy buscando una manera de vincular a las páginas del autor dentro de una instalación de WordPress simplemente colocando el símbolo @ delante del nombre de usuario de una persona en una publicación ... al igual que en Twitter.

Ejemplo:

Si el nombre de usuario es "Bill256" y escribo "@ Bill256", se vinculará a su página de autor.

Respuestas:


13

Esto es un poco complicado porque sanitize_userpermite espacios en los nombres de usuario, lo que significa que es difícil evitar agarrar la frase completa '@johndoe dijo que ...' en lugar de solo el nombre de usuario real '@johndoe' y no tiene un separador al final que ayuda. Para evitar eso, impuse el requisito de que los espacios en el nombre de usuario se reemplacen 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 );

No esperaría que esta solución sea muy robusta, no sin muchos ajustes de la expresión regular. Y creo que sería mejor con un shortcode , pero ahí lo tienes.

Nota: Se me ocurrió que este sitio tiene una funcionalidad similar a la mención. Al escribir un comentario, puede notificar a otros usuarios escribiendo "@username", pero los nombres de usuario aquí pueden tener espacios como con WordPress. El problema de "espacios" aquí se resolvió requiriendo que los espacios se eliminen , en lugar de sustituirlos con signos "+". Esa podría ser otra forma de resolver el problema.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.