Dies ist etwas knifflig, da sanitize_user
Leerzeichen in Benutzernamen zulässig sind, was bedeutet, dass es schwierig ist, zu vermeiden, dass der gesamte Ausdruck "@johndoe sagte, dass ..." verwendet wird, im Gegensatz zum eigentlichen Benutzernamen "@johndoe", und Sie haben am Ende kein Trennzeichen Hilfe. Um dies zu vermeiden, habe ich vorgeschrieben, dass Leerzeichen im Benutzernamen durch '+' ersetzt werden müssen.
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 );
Ich würde nicht erwarten, dass diese Lösung sehr robust ist, nicht ohne viel an der Regex zu arbeiten. Und ich denke, Sie wären mit einem Shortcode besser dran , aber los geht's.
Hinweis: Mir ist aufgefallen, dass diese Site eine ähnliche erwähnenswerte Funktionalität hat. Wenn Sie einen Kommentar schreiben, können Sie andere Benutzer benachrichtigen, indem Sie "@username" schreiben. Benutzernamen können hier jedoch Leerzeichen wie bei WordPress enthalten. Das "Leerzeichen" -Problem wurde hier gelöst, indem Leerzeichen entfernt und nicht durch "+" - Zeichen ersetzt werden mussten. Das könnte ein anderer Weg sein, um das Problem zu lösen.