diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php index 86b453f8f9..b9f13807c6 100644 --- a/src/wp-admin/includes/ajax-actions.php +++ b/src/wp-admin/includes/ajax-actions.php @@ -2159,11 +2159,17 @@ function wp_ajax_query_attachments() { wp_send_json_error(); $query = isset( $_REQUEST['query'] ) ? (array) $_REQUEST['query'] : array(); - $query = array_intersect_key( $query, array_flip( array( + $keys = array( 's', 'order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type', 'post_parent', 'post__in', 'post__not_in', 'year', 'monthnum' - ) ) ); + ); + foreach ( get_taxonomies_for_attachments( 'objects' ) as $t ) { + if ( $t->query_var && isset( $query[ $t->query_var ] ) ) { + $keys[] = $t->query_var; + } + } + $query = array_intersect_key( $query, array_flip( $keys ) ); $query['post_type'] = 'attachment'; if ( MEDIA_TRASH && ! empty( $_REQUEST['query']['post_status'] ) diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index 4906030922..757f22834b 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -1021,32 +1021,34 @@ function get_available_post_mime_types($type = 'attachment') { } /** - * Executes a query for attachments. An array of WP_Query arguments - * can be passed in, which will override the arguments set by this function. + * Get the query vars for the current attachments request * - * @since 2.5.0 + * @since 4.2.0 * - * @param array|bool $q Array of query variables to use to build the query or false to use $_GET superglobal. - * @return array + * @param array|false $q Array of query variables to use to build the query or false to use $_GET superglobal. + * + * @return array The parsed query vars. */ -function wp_edit_attachments_query( $q = false ) { - if ( false === $q ) +function wp_edit_attachments_query_vars( $q = false ) { + if ( false === $q ) { $q = $_GET; - + } $q['m'] = isset( $q['m'] ) ? (int) $q['m'] : 0; $q['cat'] = isset( $q['cat'] ) ? (int) $q['cat'] : 0; $q['post_type'] = 'attachment'; $post_type = get_post_type_object( 'attachment' ); $states = 'inherit'; - if ( current_user_can( $post_type->cap->read_private_posts ) ) + if ( current_user_can( $post_type->cap->read_private_posts ) ) { $states .= ',private'; + } $q['post_status'] = isset( $q['status'] ) && 'trash' == $q['status'] ? 'trash' : $states; $q['post_status'] = isset( $q['attachment-filter'] ) && 'trash' == $q['attachment-filter'] ? 'trash' : $states; $media_per_page = (int) get_user_option( 'upload_per_page' ); - if ( empty( $media_per_page ) || $media_per_page < 1 ) + if ( empty( $media_per_page ) || $media_per_page < 1 ) { $media_per_page = 20; + } /** * Filter the number of items to list per page when listing media items. @@ -1058,10 +1060,9 @@ function wp_edit_attachments_query( $q = false ) { $q['posts_per_page'] = apply_filters( 'upload_per_page', $media_per_page ); $post_mime_types = get_post_mime_types(); - $avail_post_mime_types = get_available_post_mime_types('attachment'); - - if ( isset($q['post_mime_type']) && !array_intersect( (array) $q['post_mime_type'], array_keys($post_mime_types) ) ) + if ( isset($q['post_mime_type']) && !array_intersect( (array) $q['post_mime_type'], array_keys($post_mime_types) ) ) { unset($q['post_mime_type']); + } foreach( array_keys( $post_mime_types ) as $type ) { if ( isset( $q['attachment-filter'] ) && "post_mime_type:$type" == $q['attachment-filter'] ) { @@ -1074,9 +1075,25 @@ function wp_edit_attachments_query( $q = false ) { $q['post_parent'] = 0; } - wp( $q ); + return $q; +} - return array($post_mime_types, $avail_post_mime_types); +/** + * Executes a query for attachments. An array of WP_Query arguments + * can be passed in, which will override the arguments set by this function. + * + * @since 2.5.0 + * + * @param array|false $q Array of query variables to use to build the query or false to use $_GET superglobal. + * @return array + */ +function wp_edit_attachments_query( $q = false ) { + wp( wp_edit_attachments_query_vars( $q ) ); + + $post_mime_types = get_post_mime_types(); + $avail_post_mime_types = get_available_post_mime_types( 'attachment' ); + + return array( $post_mime_types, $avail_post_mime_types ); } /** diff --git a/src/wp-admin/js/media.js b/src/wp-admin/js/media.js index a071cd6001..8e4ab7dfe8 100644 --- a/src/wp-admin/js/media.js +++ b/src/wp-admin/js/media.js @@ -1,4 +1,4 @@ -/* global ajaxurl, attachMediaBoxL10n */ +/* global ajaxurl, attachMediaBoxL10n, _wpMediaGridSettings */ var findPosts; ( function( $ ){ @@ -72,13 +72,16 @@ var findPosts; }; $( document ).ready( function() { - var $mediaGridWrap = $( '#wp-media-grid' ); + var settings, $mediaGridWrap = $( '#wp-media-grid' ); // Open up a manage media frame into the grid. if ( $mediaGridWrap.length && window.wp && window.wp.media ) { + settings = _wpMediaGridSettings; + window.wp.media({ frame: 'manage', - container: $mediaGridWrap + container: $mediaGridWrap, + library: settings.queryVars }).open(); } diff --git a/src/wp-admin/upload.php b/src/wp-admin/upload.php index dbdf3100b5..d0aa5e69c4 100644 --- a/src/wp-admin/upload.php +++ b/src/wp-admin/upload.php @@ -24,8 +24,13 @@ if ( 'grid' === $mode ) { wp_enqueue_media(); wp_enqueue_script( 'media-grid' ); wp_enqueue_script( 'media' ); + + $vars = wp_edit_attachments_query_vars(); + unset( $vars['mode'], $vars['post_type'], $vars['post_status'], $vars['posts_per_page'] ); + wp_localize_script( 'media-grid', '_wpMediaGridSettings', array( 'adminUrl' => parse_url( self_admin_url(), PHP_URL_PATH ), + 'queryVars' => $vars ) ); get_current_screen()->add_help_tab( array(