WordPress Version: 6.3
/**
* Enqueues all scripts, styles, settings, and templates necessary to use
* all media JS APIs.
*
* @since 3.5.0
*
* @global int $content_width
* @global wpdb $wpdb WordPress database abstraction object.
* @global WP_Locale $wp_locale WordPress date and time locale object.
*
* @param array $args {
* Arguments for enqueuing media scripts.
*
* @type int|WP_Post $post Post ID or post object.
* }
*/
function wp_enqueue_media($args = array())
{
// Enqueue me just once per page, please.
if (did_action('wp_enqueue_media')) {
return;
}
global $content_width, $wpdb, $wp_locale;
$defaults = array('post' => null);
$args = wp_parse_args($args, $defaults);
/*
* We're going to pass the old thickbox media tabs to `media_upload_tabs`
* to ensure plugins will work. We will then unset those tabs.
*/
$tabs = array(
// handler action suffix => tab label
'type' => '',
'type_url' => '',
'gallery' => '',
'library' => '',
);
/** This filter is documented in wp-admin/includes/media.php */
$tabs = apply_filters('media_upload_tabs', $tabs);
unset($tabs['type'], $tabs['type_url'], $tabs['gallery'], $tabs['library']);
$props = array(
'link' => get_option('image_default_link_type'),
// DB default is 'file'.
'align' => get_option('image_default_align'),
// Empty default.
'size' => get_option('image_default_size'),
);
$exts = array_merge(wp_get_audio_extensions(), wp_get_video_extensions());
$mimes = get_allowed_mime_types();
$ext_mimes = array();
foreach ($exts as $ext) {
foreach ($mimes as $ext_preg => $mime_match) {
if (preg_match('#' . $ext . '#i', $ext_preg)) {
$ext_mimes[$ext] = $mime_match;
break;
}
}
}
/**
* Allows showing or hiding the "Create Audio Playlist" button in the media library.
*
* By default, the "Create Audio Playlist" button will always be shown in
* the media library. If this filter returns `null`, a query will be run
* to determine whether the media library contains any audio items. This
* was the default behavior prior to version 4.8.0, but this query is
* expensive for large media libraries.
*
* @since 4.7.4
* @since 4.8.0 The filter's default value is `true` rather than `null`.
*
* @link https://core.trac.wordpress.org/ticket/31071
*
* @param bool|null $show Whether to show the button, or `null` to decide based
* on whether any audio files exist in the media library.
*/
$show_audio_playlist = apply_filters('media_library_show_audio_playlist', true);
if (null === $show_audio_playlist) {
$show_audio_playlist = $wpdb->get_var("SELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'audio%'\n\t\t\tLIMIT 1");
}
/**
* Allows showing or hiding the "Create Video Playlist" button in the media library.
*
* By default, the "Create Video Playlist" button will always be shown in
* the media library. If this filter returns `null`, a query will be run
* to determine whether the media library contains any video items. This
* was the default behavior prior to version 4.8.0, but this query is
* expensive for large media libraries.
*
* @since 4.7.4
* @since 4.8.0 The filter's default value is `true` rather than `null`.
*
* @link https://core.trac.wordpress.org/ticket/31071
*
* @param bool|null $show Whether to show the button, or `null` to decide based
* on whether any video files exist in the media library.
*/
$show_video_playlist = apply_filters('media_library_show_video_playlist', true);
if (null === $show_video_playlist) {
$show_video_playlist = $wpdb->get_var("SELECT ID\n\t\t\tFROM {$wpdb->posts}\n\t\t\tWHERE post_type = 'attachment'\n\t\t\tAND post_mime_type LIKE 'video%'\n\t\t\tLIMIT 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
*
* @param stdClass[]|null $months An array of objects with `month` and `year`
* properties, or `null` for default behavior.
*/
$months = apply_filters('media_library_months_with_files', null);
if (!is_array($months)) {
$months = $wpdb->get_results($wpdb->prepare("SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month\n\t\t\t\tFROM {$wpdb->posts}\n\t\t\t\tWHERE post_type = %s\n\t\t\t\tORDER BY post_date DESC", 'attachment'));
}
foreach ($months as $month_year) {
$month_year->text = sprintf(
/* translators: 1: Month, 2: Year. */
__('%1$s %2$d'),
$wp_locale->get_month($month_year->month),
$month_year->year
);
}
/**
* Filters whether the Media Library grid has infinite scrolling. Default `false`.
*
* @since 5.8.0
*
* @param bool $infinite Whether the Media Library grid has infinite scrolling.
*/
$infinite_scrolling = apply_filters('media_library_infinite_scrolling', false);
$settings = array(
'tabs' => $tabs,
'tabUrl' => add_query_arg(array('chromeless' => true), admin_url('media-upload.php')),
'mimeTypes' => wp_list_pluck(get_post_mime_types(), 0),
/** This filter is documented in wp-admin/includes/media.php */
'captions' => !apply_filters('disable_captions', ''),
'nonce' => array('sendToEditor' => wp_create_nonce('media-send-to-editor'), 'setAttachmentThumbnail' => wp_create_nonce('set-attachment-thumbnail')),
'post' => array('id' => 0),
'defaultProps' => $props,
'attachmentCounts' => array('audio' => $show_audio_playlist ? 1 : 0, 'video' => $show_video_playlist ? 1 : 0),
'oEmbedProxyUrl' => rest_url('oembed/1.0/proxy'),
'embedExts' => $exts,
'embedMimes' => $ext_mimes,
'contentWidth' => $content_width,
'months' => $months,
'mediaTrash' => MEDIA_TRASH ? 1 : 0,
'infiniteScrolling' => $infinite_scrolling ? 1 : 0,
);
$post = null;
if (isset($args['post'])) {
$post = get_post($args['post']);
$settings['post'] = array('id' => $post->ID, 'nonce' => wp_create_nonce('update-post_' . $post->ID));
$thumbnail_support = current_theme_supports('post-thumbnails', $post->post_type) && post_type_supports($post->post_type, 'thumbnail');
if (!$thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type) {
if (wp_attachment_is('audio', $post)) {
$thumbnail_support = post_type_supports('attachment:audio', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:audio');
} elseif (wp_attachment_is('video', $post)) {
$thumbnail_support = post_type_supports('attachment:video', 'thumbnail') || current_theme_supports('post-thumbnails', 'attachment:video');
}
}
if ($thumbnail_support) {
$featured_image_id = get_post_meta($post->ID, '_thumbnail_id', true);
$settings['post']['featuredImageId'] = $featured_image_id ? $featured_image_id : -1;
}
}
if ($post) {
$post_type_object = get_post_type_object($post->post_type);
} else {
$post_type_object = get_post_type_object('post');
}
$strings = array(
// Generic.
'mediaFrameDefaultTitle' => __('Media'),
'url' => __('URL'),
'addMedia' => __('Add media'),
'search' => __('Search'),
'select' => __('Select'),
'cancel' => __('Cancel'),
'update' => __('Update'),
'replace' => __('Replace'),
'remove' => __('Remove'),
'back' => __('Back'),
/*
* translators: This is a would-be plural string used in the media manager.
* If there is not a word you can use in your language to avoid issues with the
* lack of plural support here, turn it into "selected: %d" then translate it.
*/
'selected' => __('%d selected'),
'dragInfo' => __('Drag and drop to reorder media files.'),
// Upload.
'uploadFilesTitle' => __('Upload files'),
'uploadImagesTitle' => __('Upload images'),
// Library.
'mediaLibraryTitle' => __('Media Library'),
'insertMediaTitle' => __('Add media'),
'createNewGallery' => __('Create a new gallery'),
'createNewPlaylist' => __('Create a new playlist'),
'createNewVideoPlaylist' => __('Create a new video playlist'),
'returnToLibrary' => __('← Go to library'),
'allMediaItems' => __('All media items'),
'allDates' => __('All dates'),
'noItemsFound' => __('No items found.'),
'insertIntoPost' => $post_type_object->labels->insert_into_item,
'unattached' => _x('Unattached', 'media items'),
'mine' => _x('Mine', 'media items'),
'trash' => _x('Trash', 'noun'),
'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
'warnDelete' => __("You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
'warnBulkDelete' => __("You are about to permanently delete these items from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete."),
'warnBulkTrash' => __("You are about to trash these items.\n 'Cancel' to stop, 'OK' to delete."),
'bulkSelect' => __('Bulk select'),
'trashSelected' => __('Move to Trash'),
'restoreSelected' => __('Restore from Trash'),
'deletePermanently' => __('Delete permanently'),
'errorDeleting' => __('Error in deleting the attachment.'),
'apply' => __('Apply'),
'filterByDate' => __('Filter by date'),
'filterByType' => __('Filter by type'),
'searchLabel' => __('Search'),
'searchMediaLabel' => __('Search media'),
// Backward compatibility pre-5.3.
'searchMediaPlaceholder' => __('Search media items...'),
// Placeholder (no ellipsis), backward compatibility pre-5.3.
/* translators: %d: Number of attachments found in a search. */
'mediaFound' => __('Number of media items found: %d'),
'noMedia' => __('No media items found.'),
'noMediaTryNewSearch' => __('No media items found. Try a different search.'),
// Library Details.
'attachmentDetails' => __('Attachment details'),
// From URL.
'insertFromUrlTitle' => __('Insert from URL'),
// Featured Images.
'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
'setFeaturedImage' => $post_type_object->labels->set_featured_image,
// Gallery.
'createGalleryTitle' => __('Create gallery'),
'editGalleryTitle' => __('Edit gallery'),
'cancelGalleryTitle' => __('← Cancel gallery'),
'insertGallery' => __('Insert gallery'),
'updateGallery' => __('Update gallery'),
'addToGallery' => __('Add to gallery'),
'addToGalleryTitle' => __('Add to gallery'),
'reverseOrder' => __('Reverse order'),
// Edit Image.
'imageDetailsTitle' => __('Image details'),
'imageReplaceTitle' => __('Replace image'),
'imageDetailsCancel' => __('Cancel edit'),
'editImage' => __('Edit image'),
// Crop Image.
'chooseImage' => __('Choose image'),
'selectAndCrop' => __('Select and crop'),
'skipCropping' => __('Skip cropping'),
'cropImage' => __('Crop image'),
'cropYourImage' => __('Crop your image'),
'cropping' => __('Cropping…'),
/* translators: 1: Suggested width number, 2: Suggested height number. */
'suggestedDimensions' => __('Suggested image dimensions: %1$s by %2$s pixels.'),
'cropError' => __('There has been an error cropping your image.'),
// Edit Audio.
'audioDetailsTitle' => __('Audio details'),
'audioReplaceTitle' => __('Replace audio'),
'audioAddSourceTitle' => __('Add audio source'),
'audioDetailsCancel' => __('Cancel edit'),
// Edit Video.
'videoDetailsTitle' => __('Video details'),
'videoReplaceTitle' => __('Replace video'),
'videoAddSourceTitle' => __('Add video source'),
'videoDetailsCancel' => __('Cancel edit'),
'videoSelectPosterImageTitle' => __('Select poster image'),
'videoAddTrackTitle' => __('Add subtitles'),
// Playlist.
'playlistDragInfo' => __('Drag and drop to reorder tracks.'),
'createPlaylistTitle' => __('Create audio playlist'),
'editPlaylistTitle' => __('Edit audio playlist'),
'cancelPlaylistTitle' => __('← Cancel audio playlist'),
'insertPlaylist' => __('Insert audio playlist'),
'updatePlaylist' => __('Update audio playlist'),
'addToPlaylist' => __('Add to audio playlist'),
'addToPlaylistTitle' => __('Add to Audio Playlist'),
// Video Playlist.
'videoPlaylistDragInfo' => __('Drag and drop to reorder videos.'),
'createVideoPlaylistTitle' => __('Create video playlist'),
'editVideoPlaylistTitle' => __('Edit video playlist'),
'cancelVideoPlaylistTitle' => __('← Cancel video playlist'),
'insertVideoPlaylist' => __('Insert video playlist'),
'updateVideoPlaylist' => __('Update video playlist'),
'addToVideoPlaylist' => __('Add to video playlist'),
'addToVideoPlaylistTitle' => __('Add to video Playlist'),
// Headings.
'filterAttachments' => __('Filter media'),
'attachmentsList' => __('Media list'),
);
/**
* Filters the media view settings.
*
* @since 3.5.0
*
* @param array $settings List of media view settings.
* @param WP_Post $post Post object.
*/
$settings = apply_filters('media_view_settings', $settings, $post);
/**
* Filters the media view strings.
*
* @since 3.5.0
*
* @param string[] $strings Array of media view strings keyed by the name they'll be referenced by in JavaScript.
* @param WP_Post $post Post object.
*/
$strings = apply_filters('media_view_strings', $strings, $post);
$strings['settings'] = $settings;
/*
* Ensure we enqueue media-editor first, that way media-views
* is registered internally before we try to localize it. See #24724.
*/
wp_enqueue_script('media-editor');
wp_localize_script('media-views', '_wpMediaViewsL10n', $strings);
wp_enqueue_script('media-audiovideo');
wp_enqueue_style('media-views');
if (is_admin()) {
wp_enqueue_script('mce-view');
wp_enqueue_script('image-edit');
}
wp_enqueue_style('imgareaselect');
wp_plupload_default_settings();
require_once ABSPATH . WPINC . '/media-template.php';
add_action('admin_footer', 'wp_print_media_templates');
add_action('wp_footer', 'wp_print_media_templates');
add_action('customize_controls_print_footer_scripts', 'wp_print_media_templates');
/**
* Fires at the conclusion of wp_enqueue_media().
*
* @since 3.5.0
*/
do_action('wp_enqueue_media');
}