WP_ENQUEUE_MEDIA() в WordPress: подключение медиафайлов.

## WP_ENQUEUE_MEDIA() │ WP 3.5.0

Функция wp_enqueue_media() по��ключает все необходимые скрипты, стили, настройки и шаблоны для работы с медиафайлами в WordPress.

### Хуки функции

- media_upload_tabs
- media_library_show_audio_playlist
- media_library_show_video_playlist
- media_library_months_with_files
- media_library_infinite_scrolling
- disable_captions
- media_view_settings
- media_view_strings
- wp_enqueue_media

### Возвращаемое значение

- **null** — ничего не возвращает.

### Использование функции

Для подключения медиа-скриптов используйте такой код:

```php
wp_enqueue_media( $args );

Параметры (args)

  • post (int|WP_Post) — ID поста или объект поста.

По умолчанию:

$args = array();

Примеры использования

Простой пример

Чтобы подключить необходимые медиа-скрипты для админки:

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

Пример для конкретного поста

Если необходимо подключить медиа-скрипты только для определённого поста (например, ID 34):

function my_enqueue_media() {
    $args = array( 'post' => 34 );
    wp_enqueue_media( $args );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue_media' );

Важные заметки

  • Глобальные переменные:
    • $content_width — ширина контента.
    • $wpdb — объект для работы с базой данных WordPress.
    • $wp_locale — объект с локализацией даты и времени.

История изменений

  • С 3.5.0: добавлена функциональность.

Код функции WP_ENQUEUE_MEDIA

function wp_enqueue_media( $args = array() ) {
    if ( did_action( 'wp_enqueue_media' ) ) {
        return;
    }

    global $content_width, $wpdb, $wp_locale;

    $defaults = array(
        'post' => null,
    );
    $args     = wp_parse_args( $args, $defaults );

    $tabs = array(
        'type'     => '',
        'type_url' => '',
        'gallery'  => '',
        'library'  => '',
    );

    $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' ),
        'align' => get_option( 'image_default_align' ),
        '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;
            }
        }
    }

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

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

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

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

    if ( $post ) {
        $post_type_object = get_post_type_object( $post->post_type );
    } else {
        $post_type_object = get_post_type_object( 'post' );
    }

    $strings = array(
        'mediaFrameDefaultTitle' => __( 'Медиа' ),
        'url'                    => __( 'URL' ),
        'addMedia'               => __( 'Добавить медиа' ),
        'search'                 => __( 'Поиск' ),
        'select'                 => __( 'Выбрать' ),
        'cancel'                 => __( 'Отмена' ),
        'update'                 => __( 'Обновить' ),
        'replace'                => __( 'Заменить' ),
        'remove'                 => __( 'Удалить' ),
        'back'                   => __( 'Назад' ),
        'selected'               => __( '%d выбрано' ),
        'dragInfo'               => __( 'Перетаскивайте для изменения порядка медиафайлов.' ),

        // Загрузка.
        'uploadFilesTitle'       => __( 'Загрузить файлы' ),
        'uploadImagesTitle'      => __( 'Загрузить изображения' ),

        // Библиотека.
        'mediaLibraryTitle'      => __( 'Медиатека' ),
        'insertMediaTitle'       => __( 'Добавить медиа' ),
        // и другие строки...
    );

    $settings = apply_filters( 'media_view_settings', $settings, $post );
    $strings = apply_filters( 'media_view_strings', $strings, $post );

    $strings['settings'] = $settings;

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

    do_action( 'wp_enqueue_media' );
}

Связанные функции

  • wp_add_inline_script()
  • wp_dequeue_script()
  • wp_deregister_script()
  • wp_enqueue_script()
  • wp_localize_script()
  • wp_register_script()
  • wp_script_add_data()
  • wp_script_is()

Скрипты и стили

  • add_editor_style()
  • wp_add_inline_style()
  • wp_dequeue_style()
  • wp_deregister_style()
  • wp_enqueue_style()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *