Можно ли фильтровать комментарии в сообщении, чтобы пользователь мог видеть только комментарии, которые они написали?

Я относительно новичок в Wordpress и кодировании, и я работаю над сайтом, где пользователям нужно оставлять комментарии для определенных сообщений, но человек, которого я создаю для сайта, хочет, чтобы пользователь мог видеть только комментарии, которые они написали для этих конкретных сообщений, а не комментарии других пользователей.

Я искал вокруг какое-то время и не смог найти решение, которое, похоже, работает. Есть ли способ заставить это работать, что достаточно просто для меня? Любая помощь будет принята с благодарностью.

Спасибо!

7 голосов | спросил Keith Pocock 3 AMpMon, 03 Apr 2017 01:35:44 +030035Monday 2017, 01:35:44

1 ответ


3

Предполагая, что ваши авторы комментариев предназначены для зарегистрированных пользователей, самым простым способом, вероятно, является использование pre_get_comments action , чтобы изменить WP_Comment_Query объект user_id query var, чтобы запрос возвращал комментарии только от текущего пользователя:

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' );

Вы также можете использовать current_user_can() вместо /в дополнение к проверке роли пользователя , чтобы настроить, какие комментарии фильтруются для.

Хотя вы также можете поддерживать анонимный комментарий с помощью wp_get_current_commenter() в сочетании с author_email WP_Comment_Query, это не очень надежно или безопасно. Анонимные данные идентификатора комментария хранятся в файлах cookie, что означает, что пользователь может его очистить, или файлы cookie могут истечь - в этом случае пользователь не сможет просматривать свои комментарии до тех пор, пока не опубликует их. Учетные данные также довольно легко подделаны - хитрые посетители могут потенциально получить доступ к комментариям от других пользователей.


EDIT - Почему это не работает, ранее

После дальнейшего изучения мои предыдущие попытки использовать WP_Comment_Query::set() для изменения переменных запроса были неудачными, потому что, как выясняется, WP_Comment_Query на самом деле не имеет метода set(), в отличие от ---- +: = 11 =: + ---- (см. билет № 39120 ). Однако он имеет WP_Query «Волшебный метод» , который перехватывал вызов несуществующего __call() и возвращает значение false, тем самым предотвращая ошибку, которую PHP обычно вызывал и путал бы меня до конца.

ответил bosco 3 AMpMon, 03 Apr 2017 03:42:57 +030042Monday 2017, 03:42:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132