WordPress Внутренние @ Упоминания

8

Я ищу способ ссылки на страницы автора в рамках одной установки WordPress, просто поместив символ @ перед именем пользователя в сообщении ... как в твиттере.

Пример:

Если имя пользователя - «Bill256», а я пишу «@ Bill256», оно будет связано со страницей его автора.

AndrettiMilas
источник

Ответы:

13

Это немного сложно, потому что sanitize_userдопускает пробелы в именах пользователей, а это означает, что трудно избежать захвата всей фразы «@johndoe сказал, что ...», а не просто фактического имени пользователя «@johndoe», и в конце у вас нет разделителя, который бы Помогите. Чтобы избежать этого, я наложил требование заменить пробелы в имени пользователя на «+».

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

Я не ожидал бы, что это решение будет очень надежным, не без особой настройки регулярного выражения. И я думаю, что вам будет лучше с коротким кодом , но вы идете.

Примечание: мне пришло в голову, что этот сайт имеет похожую функциональность, похожую на упоминание. При написании комментария вы можете уведомить других пользователей, написав "@username", но здесь имена пользователей могут содержать пробелы, как в WordPress. Проблема «пробелов» здесь была решена путем требования, чтобы пробелы просто удалялись , а не заменялись знаками «+». Это может быть еще один способ решения проблемы.

s_ha_dum
источник