Разрешить пользователям управлять только комментариями к своим сообщениям - PullRequest
0 голосов
/ 21 октября 2011

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

Я пробовал следующий фильтр безуспешно.

//Manage Your Own Comments Only
    function myplugin_comments_thisuseronly( $wp_query ) {
if ( strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/edit-comments.php' ) !== false ) {
    if ( !current_user_can( 'edit_others_posts' ) ) {
        global $current_user;global $wpdb;
        $usersposts = $wpdb->get_results( $wpdb->prepare("SELECT ID FROM wp_posts WHERE post_author = %s", $current_user->id) );
        $wp_query->set('comment_post_ID', array($usersposts));
    }
}
}

add_filter ('parse_query', 'myplugin_comments_thisuseronly');

я тоже пробовал

$wp_query->set('comment_post_ID__in', array($usersposts));

1 Ответ

3 голосов
/ 04 декабря 2011

Хорошо, я понял это.

Во-первых, пользователь должен иметь роль с правами на редактирование опубликованных сообщений и модерирование комментариев.Последний является не стандартным для авторов / авторов.

Затем, отфильтровав запрос, который получает комментарии (используя comments_clauses) и добавив объединение, вы можете показывать только комментарии для сообщений на текущий момент.вошел в систему пользователя.

function my_plugin_get_comment_list_by_user($clauses) {
if (is_admin()) {
    global $user_ID, $wpdb;
    $clauses['join'] = ", wp_posts";
    $clauses['where'] .= " AND wp_posts.post_author = ".$user_ID." AND wp_comments.comment_post_ID = wp_posts.ID";
};
return $clauses;
};
// Ensure that editors and admins can moderate all comments
if(!current_user_can('edit_others_posts')) {
add_filter('comments_clauses', 'my_plugin_get_comment_list_by_user');
}

Работает отлично.Изменения в ролях могут не подходить для каждой настройки, но на самом деле это работает для меня на этом сайте.

...