web-dev-qa-db-ja.com

WordPress Internal @ Mentions

私はTwitterのように、投稿の中でユーザーのユーザー名の前に@記号を置くことによって、1つのWordPressインストール内の作成者ページにリンクする方法を探しています。

例:

ユーザー名が「Bill256」で、私が「@ Bill256」と書いた場合、それは彼の作者ページにリンクされます。

8
AndrettiMilas

sanitize_user はユーザー名にスペースを入れることができるので、これは少しトリッキーです。 username '@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のようにスペースを持つことができます。ここでの "スペース"の問題は で解決され、 "+"記号で置き換えるのではなく、スペースを削除するだけでよいようになりました 。それが問題解決のもう一つの方法かもしれません。

13
s_ha_dum

P2テーマを見てください。これを「メンション」と呼んで行います。

http://themes.svn.wordpress.org/p2/1.4.2/inc/mentions.php

4
Otto