Скрыть от пользователей чужие медиафайлы в админке WP

Опубликовано: 01.09.2018

Когда вы открываете регистрацию на сайте и пускаете всех в админку, вам следует предусмотреть множество мелочей. Конечно тут всё зависит от целей, которые преследуются на сайте, но лично я столкнулся с ситуацией, когда от пользователей нужно было скрыть все медиафайлы, которые были загружены не ими (как правило это касается пользователей с правами автора и выше , потому как участники не видят медиафайлов вообще, а про подписчиков я и вовсе молчу).

Скрыть по сути нужно в двух местах — во всплывающем окне вставки медиафайла здесь:

И собственно в самой библиотеке тут:

Сейчас я покажу вам, как этого достичь — решение задачи сводится к простой вставке готового кода в functions.php.

add_filter ( 'posts_where' , 'true_hide_attachments_from_another_author' ) ; function true_hide_attachments_from_another_author ( $where ) { global $current_user ; if ( !current_user_can ( 'administrator' ) // пользователь - не администратор, но можно это убрать && isset ( $_POST [ 'action' ] ) // придётся использовать это условие, если не хотите получать Notices при включенном WP_DEBUG && $_POST [ 'action' ] == 'query-attachments' ) // вложения загружаются AJAX запросом, в котором POST-параметр action равен query-attachments $where .= ' AND post_author=' . $current_user -> data -> ID ; // добавляем автора в SQL запрос return $where ; }

Этот способ более глобальный и затрагивает все запросы, а если убрать из него проверку is_admin() , то он ещё и на сайте вложения сможет попрятать. Но не беспокойтесь — из самих постов изображения не пропадут ни при каких случаях.

if ( is_admin ( ) ) // мы ведь только в админке скрываем, да? add_filter ( 'parse_query' , 'true_hide_attachments_2' ) ; function true_hide_attachments_2 ( $wp_query ) { global $current_user ; if ( !current_user_can ( 'administrator' ) // администраторов всё так же не трогаем && isset ( $wp_query -> query_vars [ 'post_type' ] ) // защищаемся от Notices :) && $wp_query -> query_vars [ 'post_type' ] == "attachment" ) // тип поста - вложения $wp_query -> set ( 'author' , $current_user -> data -> ID ) ; }

Смотрите также

rss