Как разрешить пользователям видеть только те комменты в админке, которые оставлены к их постам

По умолчанию пользователи с ролями авторов и участников в любом случае не могут редактировать комментарии, оставленные к чужим постам.

Тем не менее, если вы хотите полностью скрыть от них эти комменты, вставляем код в functions.php:

function true_get_comments_by_user_posts($clauses) {
    if (is_admin()) {
        global $wpdb, $user_ID;
        $clauses['join'] = ", {$wpdb->prefix}posts";
        $clauses['where'] .= " AND {$wpdb->prefix}posts.post_author = ".$user_ID." AND {$wpdb->prefix}comments.comment_post_ID = {$wpdb->prefix}posts.ID";
    }
    return $clauses;
}
 
// включаем фильтр, если у пользователя нет прав на редактирование чужих постов, то есть он либо автор, либо участник, либо подписчик
if(!current_user_can('edit_others_posts')) {
    add_filter('comments_clauses', 'true_get_comments_by_user_posts');
}

После установки этого кода возможны некоторые несоответствия значений счетчика, например:

баг счетчика комментариев

Как видно из скриншота, к постам какого-то автора оставлено всего два комментария, однако счетчик показывает 9 штук на модерацию, а если перейти на вкладку «Ожидающие», то мы увидим вот что:

комментарии, ожидающие проверки

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

Если решение всё же найдется, я обязательно добавлю его в этот пост.

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: