Giả sử tác giả nhận xét của bạn dự định là người dùng đã đăng ký, cách dễ nhất có lẽ là sử dụng móc pre_get_comments
hành động để sửa đổi var truy vấn của WP_Comment_Query
đối tượnguser_id
sao cho truy vấn chỉ trả về nhận xét từ người dùng hiện tại:
function wpse262203_restrict_comment_views( $comments_query ) {
// Don't interfere with comment results in the dashboard
if( is_admin() )
return;
$current_user = wp_get_current_user(); // Get the current user
if( $current_user instanceof WP_User && is_user_logged_in() ) {
// The visitor is logged in as a WordPress user...
// If they're an administrator, don't filter the comments
if( in_array( 'administrator', $current_user->roles ) )
return;
// Otherwise, restrict queried comments to those authored by this user.
$comments_query->query_vars[ 'user_id' ] = $current_user->ID;
}
else {
// The visitor isn't logged in - make sure no comments are queried.
$comments_query->query_vars[ 'comment__in' ] = array(0);
}
}
add_action( 'pre_get_comments', 'wpse262203_restrict_comment_views' );
Bạn cũng có thể sử dụng current_user_can()
thay vì / ngoài việc kiểm tra vai trò của người dùng để điều chỉnh những người nhận xét được lọc.
Mặc dù bạn cũng có thể hỗ trợ nhận xét ẩn danh bằng cách sử dụng wp_get_current_commenter()
cùng với author_email
WP_Comment_Query
đối số, nhưng điều này không đáng tin cậy hoặc an toàn. Dữ liệu ID của người bình luận ẩn danh được lưu trữ trong cookie, có nghĩa là người dùng có thể xóa nó hoặc cookie có thể hết hạn - trong trường hợp đó, người dùng sẽ không thể xem bình luận của họ cho đến khi họ đăng bài khác. Thông tin đăng nhập cũng khá dễ bị giả mạo - khách truy cập xảo quyệt có thể có quyền truy cập vào nhận xét từ người dùng khác.
EDIT - Tại sao điều này không hoạt động, trước đây
Sau khi điều tra thêm, những nỗ lực trước đây của tôi để sử dụng WP_Comment_Query::set()
để thay đổi các biến truy vấn đã thất bại vì WP_Comment_Query
thực tế , nó không thực sự có một set()
phương thức, không giống như WP_Query
đối tác của nó (xem vé # 39120 ). Tuy nhiên, nó có một __call()
"Phương thức ma thuật" , nó đã chặn cuộc gọi đến set()
phương thức không tồn tại và trả về sai, do đó ngăn ngừa lỗi mà PHP sẽ thường ném và làm tôi bối rối.