私は(wp_editorから)wordpressメディアライブラリのポップアップに表示されるファイルを制限しようとしています。
現在私のサイトにアップロードしたことがあるすべてのファイルがライブラリに表示されていますが、過去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;
}
ajax_query_attachments_args
フィルタを通して、メディアライブラリのポップアップでattachment queryを調整できます。
これが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;
} );
このようにしてフィルタ "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;
}