Media: Add filters to allow overriding slow media queries.
There are a couple of queries that do a full table scan of attachment posts to support features of the media library. Pending a more complete solution, allow overriding these queries via filters. Props sboisvert, jnylen0. See #31071. git-svn-id: https://develop.svn.wordpress.org/trunk@40382 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
86d333dc26
commit
74e7dab932
@ -3321,6 +3321,22 @@ function wp_enqueue_media( $args = array() ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows showing or hiding the "Create Audio Playlist" button in the media library.
|
||||||
|
*
|
||||||
|
* By default (if this filter returns `null`), a query will be run to
|
||||||
|
* determine whether the media library contains any audio items. This
|
||||||
|
* query is expensive for large media libraries, so it may be desirable for
|
||||||
|
* sites to override this behavior.
|
||||||
|
*
|
||||||
|
* @since 4.7.4
|
||||||
|
*
|
||||||
|
* @link https://core.trac.wordpress.org/ticket/31071
|
||||||
|
*
|
||||||
|
* @return bool|null Whether to show the button, or `null` for default behavior.
|
||||||
|
*/
|
||||||
|
$has_audio = apply_filters( 'media_has_audio', null );
|
||||||
|
if ( is_null( $has_audio ) ) {
|
||||||
$has_audio = $wpdb->get_var( "
|
$has_audio = $wpdb->get_var( "
|
||||||
SELECT ID
|
SELECT ID
|
||||||
FROM $wpdb->posts
|
FROM $wpdb->posts
|
||||||
@ -3328,6 +3344,24 @@ function wp_enqueue_media( $args = array() ) {
|
|||||||
AND post_mime_type LIKE 'audio%'
|
AND post_mime_type LIKE 'audio%'
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
" );
|
" );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows showing or hiding the "Create Video Playlist" button in the media library.
|
||||||
|
*
|
||||||
|
* By default (if this filter returns `null`), a query will be run to
|
||||||
|
* determine whether the media library contains any video items. This
|
||||||
|
* query is expensive for large media libraries, so it may be desirable for
|
||||||
|
* sites to override this behavior.
|
||||||
|
*
|
||||||
|
* @since 4.7.4
|
||||||
|
*
|
||||||
|
* @link https://core.trac.wordpress.org/ticket/31071
|
||||||
|
*
|
||||||
|
* @return bool|null Whether to show the button, or `null` for default behavior.
|
||||||
|
*/
|
||||||
|
$has_video = apply_filters( 'media_has_video', null );
|
||||||
|
if ( is_null( $has_video ) ) {
|
||||||
$has_video = $wpdb->get_var( "
|
$has_video = $wpdb->get_var( "
|
||||||
SELECT ID
|
SELECT ID
|
||||||
FROM $wpdb->posts
|
FROM $wpdb->posts
|
||||||
@ -3335,12 +3369,33 @@ function wp_enqueue_media( $args = array() ) {
|
|||||||
AND post_mime_type LIKE 'video%'
|
AND post_mime_type LIKE 'video%'
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
" );
|
" );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows overriding the list of months displayed in the media library.
|
||||||
|
*
|
||||||
|
* By default (if this filter does not return an array), a query will be
|
||||||
|
* run to determine the months that have media items. This query can be
|
||||||
|
* expensive for large media libraries, so it may be desirable for sites to
|
||||||
|
* override this behavior.
|
||||||
|
*
|
||||||
|
* @since 4.7.4
|
||||||
|
*
|
||||||
|
* @link https://core.trac.wordpress.org/ticket/31071
|
||||||
|
*
|
||||||
|
* @return array|null An array of objects with `month` and `year`
|
||||||
|
* properties, or `null` (or any other non-array value)
|
||||||
|
* for default behavior.
|
||||||
|
*/
|
||||||
|
$months = apply_filters( 'media_months', null );
|
||||||
|
if ( ! is_array( $months ) ) {
|
||||||
$months = $wpdb->get_results( $wpdb->prepare( "
|
$months = $wpdb->get_results( $wpdb->prepare( "
|
||||||
SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
|
SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
|
||||||
FROM $wpdb->posts
|
FROM $wpdb->posts
|
||||||
WHERE post_type = %s
|
WHERE post_type = %s
|
||||||
ORDER BY post_date DESC
|
ORDER BY post_date DESC
|
||||||
", 'attachment' ) );
|
", 'attachment' ) );
|
||||||
|
}
|
||||||
foreach ( $months as $month_year ) {
|
foreach ( $months as $month_year ) {
|
||||||
$month_year->text = sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month_year->month ), $month_year->year );
|
$month_year->text = sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month_year->month ), $month_year->year );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user