wp_enqueue_media() WP 3.5.0

Підключає всі файли, необхідні для використання медіа API WordPress (вікно завантаження та вибору файлів). Функція включає скрипти, стилі, налаштування та шаблони.

Функцію слід викликати під час події admin_enqueue_scripts чи пізніше.

Цікава стаття , що показує, як додати поле форми для завантаження та вибору зображення на сторінку налаштувань адмін-панелі.

Документація зі скрипту медіатеки: Media Backbone Guide

Повертає

null. Нічого не вертає.

Використання

wp_enqueue_media( $args );
$args
(масив)
Поки можна використовувати лише один аргумент – ‘
post ‘. Якщо вказати цей аргумент, то скрипти буде підключено лише для зазначеної посади.


За замовчуванням: array()

Приклади

0

#1 Базове використання

Підключимо всі скрипти, стилі та шаблони медіа API WordPress:

function my_enqueue_media() {
	wp_enqueue_media();
}
add_action( 'admin_enqueue_scripts', 'my_enqueue_media' );

Те саме, тільки для конкретного посту:

function my_enqueue_media() {
	$ args = array ( 'post' => 34);

	wp_enqueue_media( $args );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue_media' );

нотатки

  • Global. int. $content_width
  • Global. wpdb. $wpdb WordPress database abstraction object.
  • Global. WP_Locale. $wp_locale WordPress date and time locale object.

список змін

З версії 3.5.0Введено.

Код wp_enqueue_media() WP 6.0.2

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' => '',
	);

	/** Цей filter is documented в 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'), // Empty default.
	);

	$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;
			}
		}
	}

	/**
	 * За допомогою шоу або перегляду "Створення аудіо playlist" button in 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
	 * Визначте, де 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, або `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
			FROM $wpdb->posts
			WHERE post_type = 'attachment'
			AND post_mime_type LIKE 'audio%'
			LIMIT 1
		"
		);
	}

	/**
	 * Можна показувати або ознайомитися з "Створити відео playlist" button in media library.
	 *
	 * Залежно від того, "Create Video Playlist" button will always be shown in
	 * the media library. If this filter returns `null`, a query will be run
	 * Визначте, де є медіа 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, або `null` to decide based
	 * на будь-яких відео файлах 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
			FROM $wpdb->posts
			WHERE post_type = 'attachment'
			AND post_mime_type LIKE 'video%'
			LIMIT 1
		"
		);
	}

	/**
	 * Застосовуючи перегляд листів місій, які відображаються в media library.
	 *
	 * By default (if this filter does no 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, так це може бути необов'язковою для сайтів
	 * override це behavior.
	 *
	 * @ Since 4.7.4
	 *
	 * @link https://core.trac.wordpress.org/ticket/31071
	 *
	 * @param array|null $months На array of objects with `month` та `year`
	 * properties, or `null` (or any other non-array value)
	 * 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
			FROM $wpdb->posts
			WHERE post_type = %s
			ORDER 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 має 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 ),
		/** Цей filter is documented в wp-admin/includes/media.php */
		'captions' =>! apply_filters( 'disable_captions', '' ),
		'nonce' => array(
			'sendToEditor' => wp_create_nonce( 'media-send-to-editor' ),
		),
		'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: Це is would-be plural string used in the media manager.
		 * Якщо ви не використовуєте слово, яке можна використовувати у вашій мові для того, щоб поділитися з цим
		 * lack of plural support here, turn it in "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' => __( "Те, що ви можете залишити цей пункт з вашого сайту.nЦе рішення не може бути незмінним.n 'Cancel' to stop, 'OK' to delete." ),
		'warnBulkDelete' => __( "Ви можете продовжувати продовжувати ці пункти з вашого сайту.nЦя річ може не бути незмінною.n 'Cancel' to stop, 'OK' to delete." ),
		'warnBulkTrash' => __( "Ви можете прочитати ці елементи.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' ),

		// Від 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 об'єкт.
	 */
	$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 об'єкт.
	 */
	$strings = apply_filters( 'media_view_strings', $strings, $post);

	$strings['settings'] = $settings;

	// Ensure we enqueue media-editor first, that way media-views
	// is registered internally be 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' );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *