Có thể lọc bình luận trong một bài đăng để người dùng chỉ có thể thấy các bình luận họ đã viết?


8

Tôi còn khá mới với wordpress và mã hóa, và tôi đang làm việc trên một trang web nơi người dùng sẽ cần để lại nhận xét cho một số bài đăng nhất định, nhưng người tôi đang xây dựng trang web muốn người dùng chỉ có thể xem các nhận xét họ đã viết cho các bài đăng cụ thể này, và không có bất kỳ nhận xét nào từ người dùng khác.

Tôi đã tìm kiếm xung quanh một thời gian và không thể tìm thấy một giải pháp có vẻ hiệu quả. Có cách nào để làm việc này đủ đơn giản để tôi thực hiện không? Mọi sự trợ giúp sẽ rất được trân trọng.

Cảm ơn!

Câu trả lời:


2

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_commentshà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_Querythự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.


Xin chào Bosco, Cảm ơn bạn đã phản hồi nhanh chóng. Bạn đã đúng khi cho rằng điều này sẽ dành cho người dùng đã đăng ký. Xin lỗi tôi đã không làm rõ trong bài viết gốc của tôi. Vì vậy, tôi không làm hỏng việc này, mã này sẽ được đặt ở đâu? Trong tập tin Comments.php?
Keith Pocock

1
@KeithPocock Đây là một "hook hành động" - vì vậy nó sẽ thực thi khi cần miễn là WordPress xử lý mã. Bạn có thể dán nó vào functions.phptệp của chủ đề , tuy nhiên nếu bên thứ 3 tạo chủ đề, các thay đổi có thể bị ghi đè khi chủ đề cập nhật. Nơi tốt nhất để đặt cái này là trong một plugin mới - làm theo phần "Bắt đầu" trong Sổ tay phát triển plugin (chỉ phần trên cùng của trang) để tạo tệp plugin mới, sau đó dán giải pháp vào câu trả lời của tôi bên dưới Thông tin tiêu đề.
bosco

Xin chào Bosco, cảm ơn đã làm rõ. Tôi đã cố gắng đặt nó vào tệp tin.php. Nhưng nó không lọc được các bình luận cho một người dùng cụ thể khi tôi kiểm tra nó (rất có thể là tôi đang làm sai hoặc không hiểu haha). Tôi sẽ thử nó như một plugin lần này và sẽ phản hồi lại với bất kỳ kết quả nào. Cảm ơn một lần nữa!
Keith Pocock

@KeithPocock Rất tiếc! Tôi đã tìm thấy một lỗi nhỏ trong mã của mình - nó sẽ hoạt động trong cả plugin hoặc functions.phpbây giờ (mặc dù thành thật mà nói tôi chưa thực sự kiểm tra nó Oo). Cho tôi biết làm thế nào nó đi!
bosco

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.