Intereting Posts
Как контролировать длину выдержек вручную? Не удалось сохранить обычное мета-поле datetime с помощью функции update_post_meta () Белый экран смерти только в wp-admin Как управлять несколькими доменами на разных языках в каждом домене с помощью одной установки WordPress? Статический счетчик для короткого кода работает слишком много раз Редактирование фида для эскизов и ссылок Предупреждать пользователя о том, что данные могут быть потеряны для пользовательских страниц Ошибка AJAX после актуализации Добавление класса к следующему / предыдущему изображению в файле attachment.php Синтаксис для обновления wp-json / wc / v2 / клиентов meta_data Изменить фильтр сообщений, чтобы установить индивидуальное количество сообщений на странице и исключить дочерние сообщения Как добавить в поле user_meta (добавить) Импорт MariaDB в Mysql в WordPress Список всех блогов, кроме текущего блога и основного блога в WordPress Multisite можно ли получить полную запись в WordPress в RSS-ленте?

Как я могу управлять и ограничивать использование диска для каждого автора?

Я хочу показывать и ограничивать использование диска для каждого автора и иметь возможность управлять дисковым использованием в качестве администратора.

Пример: author1: дисковое пространство 20 Мб; если они загрузили более 20 Мб, кнопка загрузки (в медиа-библиотеке и пост) отключена.

author2: дисковое пространство составляет 30 Мб, если они загружают более 30 Мб, кнопка загрузки (в медиа-библиотеке и пост) отключена.

Okey, так что это просто пример того, как вы можете архивировать это.

Сначала измените каталог загрузки на текущее имя пользователя. например, uploads / admin

function wpse_16722_type_upload_dir( $args ) { // Get current user data $current_user = wp_get_current_user(); // Make upload dir to current username $newdir = '/' . $current_user->user_login; $args['path'] = str_replace( $args['subdir'], '', $args['path'] ); //remove default subdir $args['url'] = str_replace( $args['subdir'], '', $args['url'] ); $args['subdir'] = $newdir; $args['path'] .= $newdir; $args['url'] .= $newdir; return $args; } add_filter( 'upload_dir', 'wpse_16722_type_upload_dir' ); 

Затем нам нужна функция для проверки размера текущей загрузки пользователей. Я нашел функцию recurse_dirsize в ms-functions.php, которая вычисляет каталог в байтах.

 /** * Get the size of a directory recursively. * * Used by get_dirsize() to get a directory's size when it contains * other directories. * * @since MU * * @param string $directory * @return int */ function recurse_dirsize( $directory ) { $size = 0; $directory = untrailingslashit( $directory ); if ( !file_exists($directory) || !is_dir( $directory ) || !is_readable( $directory ) ) return false; if ($handle = opendir($directory)) { while(($file = readdir($handle)) !== false) { $path = $directory.'/'.$file; if ($file != '.' && $file != '..') { if (is_file($path)) { $size += filesize($path); } elseif (is_dir($path)) { $handlesize = recurse_dirsize($path); if ($handlesize > 0) $size += $handlesize; } } } closedir($handle); } return $size; } 

И тогда нам нужно проверить, если текущие пользователи загружаются больше, чем x, если отключить media_buttons

 function wpse_16722_user_upload_size() { // Get current user data $current_user = wp_get_current_user(); // Array of key => value pairs $uploads = wp_upload_dir(); $dir = $uploads['basedir'] . '/' . $current_user->user_login; if( file_exists( $dir ) && is_dir( $dir ) ) { $size = recurse_dirsize( $dir ) / 1024 / 1024; // Convert bytes to human readable format $new_size = round( $size / 1024 * 1024, 2 ); // If current users upload dir is // Bigger than 20 MB disable // Upload buttton if( $new_size >= 20 ) { remove_action( 'media_buttons', 'media_buttons' ); } } } add_action('admin_head', 'wpse_16722_user_upload_size'); 

Вы также хотели управлять несколькими пользователями и разными размерами. Я бы рекомендовал вам добавить страницу настроек, которая сохраняет доступный размер пользователей с помощью update_user_meta($user_id, 'size_limit', $value ); Подробнее об этом читайте здесь.

Когда у вас есть размеры, добавленные в users_meta вы можете изменить размер внутри функции wpse_16722_user_upload_size «20» на размер в пределах get_user_meta( $user_id, 'size_limit');

 // this function disable media buttons function removemediabuttons() { remove_action( 'media_buttons', 'media_buttons' ); } // this function check the total size of all attachments by user. //But it doesnt count sizes of thumbnails. // $limitBytes -- maximum size in bytes function checkMidiaSizeByUser($userId, $limitBytes) { // get all attachments of $userId $attachements = query_posts( array( 'post_type' => 'attachment', 'author' => $userId ) ); // count size $size = 0; foreach($attachements as $attachment){ $size += filesize( get_attached_file( $attachment->ID ) ); } // check limit if ( $size >= $limitBytes ) { add_action('admin_head','removemediabuttons'); } } /* **************************************** */ // Set our limit to 20Mb $limit = 20*1024*1024; // get current user global $current_user; get_currentuserinfo(); //check limit and disable media buttons if user met limit checkMidiaSizeByUser($current_user->ID, $limit); 

Я не тестирую этот код в реальной работе, но он должен работать.