Скрыть старые вложения из медиа-библиотеки wp


Я пытаюсь ограничить файлы, отображаемые во всплывающем окне медиатеки wordpress (из wp_editor).

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

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

add_action('pre_get_posts','users_own_attachments');
function users_own_attachments( $wp_query_obj ) {

global $current_user, $pagenow;

if( !is_a( $current_user, 'WP_User') )
    return;

if( !in_array( $pagenow, array( 'upload.php', 'admin-ajax.php' ) )
    return;

if( !current_user_can('delete_pages') )
    $wp_query_obj->set('author', $current_user->ID );

return;
}
Author: ameeromar, 2015-08-16

2 answers

Вы можете настроить запрос вложения во всплывающем окне библиотеки мультимедиа с помощью фильтра ajax_query_attachments_args.

Вот два примера PHP 5.4+:

Пример #1:

Показывать только вложения, загруженные в течение последних 24 часов:

/**
 * Media Library popup 
 * - Only display attachments uploaded during the last 24 hours:
 */
add_filter( 'ajax_query_attachments_args', function( $args )
{
   $args['date_query'] = [['after' => '24 hours ago', 'inclusive' => true ]];
   return $args;
} );

Пример #2:

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

/**
 * Media Library popup
 *    - Only display attachments uploaded during the last 24 hours by the current user:
 */
add_filter( 'ajax_query_attachments_args', function( $args )
{
   $args['author']     = get_current_user_id();
   $args['date_query'] = [['after' => '24 hours ago', 'inclusive' => true ]];
   return $args;
} );
 5
Author: birgire, 2015-08-17 08:15:18

Добавьте фильтр "ajax_query_attachments_args" таким образом, и переменные URL-адреса будут отправлены в класс WP_Query

По умолчанию используется отправка

array(7) {
  ["orderby"]=>         string(4) "date"
  ["order"]=>           string(4) "DESC"
  ["posts_per_page"]=>  string(2) "40"
  ["paged"]=>           string(1) "1"
  ["post_type"]=>       string(10) "attachment"
  ["post_status"]=>     string(15) "inherit,private"
}

Здесь вы можете изменить по своему вкусу

add_filter( 'ajax_query_attachments_args', 'my_ajax_query_attachments_args', 1, 10 );

function my_ajax_query_attachments_args($query) {
  $query['date_query'] = array(
    array(
      'before'     => "-1 day",
      'inclusive' => true,
    ),
  );
  var_dump($query);
  return $query;
}  
 2
Author: Salem Terrano, 2015-08-17 08:13:11