私は、Twitterのように、投稿の人のユーザー名の前に@記号を付けるだけで、1つのWordPressインストール内で作成者ページにリンクする方法を探しています。
例:
ユーザー名が「Bill256」で、「@ Bill256」と書いた場合、彼の著者ページにリンクされます。
私は、Twitterのように、投稿の人のユーザー名の前に@記号を付けるだけで、1つのWordPressインストール内で作成者ページにリンクする方法を探しています。
例:
ユーザー名が「Bill256」で、「@ Bill256」と書いた場合、彼の著者ページにリンクされます。
回答:
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のようにスペースを含めることができます。ここでの「スペース」の問題は、スペースを「+」記号で置き換えるのではなく、単に削除することを要求することで解決されました。それは問題を解決する別の方法かもしれません。
P2テーマを見てください。それを「メンション」と呼んでいます。