WordPress内部@提及


Answers:


13

这有点棘手,因为sanitize_user在用户名中允许使用空格,这意味着很难避免抓住整个短语“ @johndoe said ...”,而不是实际的用户名“ @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 );

我希望这种解决方案不会非常健壮,除非对正则表达式进行大量调整。而且我认为使用shortcode会更好,但是您就可以了。

注意:在我看来,该站点具有类似的提及式功能。撰写评论时,您可以通过写“ @username”来通知其他用户,但此处的用户名可以像WordPress一样具有空格。通过要求仅删除空格而不是用“ +”符号代替,可以解决此处的“空格”问题。那可能是解决问题的另一种方法。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.