Đây là một mẹo nhỏ vì sanitize_user
cho phép khoảng trắng trong tên người dùng, có nghĩa là khó tránh khỏi việc lấy toàn bộ cụm từ '@johndoe nói rằng ...' trái ngược với tên người dùng thực tế '@johndoe' và cuối cùng bạn không có dấu phân cách Cứu giúp. Để tránh điều đó, tôi áp đặt một yêu cầu rằng các khoảng trắng trong tên người dùng phải được thay thế bằng '+'.
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 );
Tôi sẽ không mong đợi giải pháp này sẽ rất mạnh mẽ, không phải không có nhiều điều chỉnh của regex. Và tôi nghĩ rằng bạn sẽ tốt hơn với một shortcode , nhưng bạn sẽ đi.
Lưu ý: Tôi nhận thấy rằng trang web này có chức năng tương tự như đề cập. Khi viết bình luận, bạn có thể thông báo cho những người dùng khác bằng cách viết "@username" nhưng tên người dùng ở đây có thể có khoảng trắng như với WordPress. Vấn đề "khoảng trắng" ở đây đã được giải quyết bằng cách yêu cầu xóa khoảng trắng , thay vì thay thế bằng dấu "+". Đó có thể là một cách khác để giải quyết vấn đề tiếp cận.