Когда вы открываете регистрацию на сайте и пускаете всех в админку, вам следует предусмотреть множество мелочей. Конечно тут всё зависит от целей, которые преследуются на сайте, но лично я столкнулся с ситуацией, когда от пользователей нужно было скрыть все медиафайлы, которые были загружены не ими (как правило это касается пользователей с правами автора и выше, потому как участники не видят медиафайлов вообще, а про подписчиков я и вовсе молчу).
Скрыть по сути нужно в двух местах — во всплывающем окне вставки медиафайла здесь:
И собственно в самой библиотеке тут:
Сейчас я покажу вам, как этого достичь — решение задачи сводится к простой вставке готового кода в 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 ); }