Ini sedikit rumit karena sanitize_user
memungkinkan spasi dalam nama pengguna, yang berarti sulit untuk menghindari mengambil seluruh frasa '@johndoe mengatakan bahwa ...' sebagai lawan dari hanya nama pengguna yang sebenarnya '@johndoe' dan Anda tidak memiliki pemisah pada akhirnya yang akan Tolong. Untuk menghindari itu saya memberlakukan persyaratan bahwa spasi di nama pengguna diganti dengan '+'.
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 );
Saya tidak akan mengharapkan solusi ini menjadi sangat kuat, bukan tanpa banyak mengutak-atik regex. Dan saya pikir Anda akan lebih baik dengan kode pendek , tapi begitulah .
Catatan: Terlintas di benak saya bahwa situs ini memiliki fungsi mirip-suka yang serupa. Saat menulis komentar, Anda dapat memberi tahu pengguna lain dengan menulis "@namapengguna" tetapi nama pengguna di sini dapat memiliki spasi seperti dengan WordPress. Masalah "spasi" di sini diselesaikan dengan mengharuskan ruang hanya dihapus , alih-alih diganti dengan tanda "+". Itu bisa menjadi cara lain untuk menyelesaikan pendekatan masalah.