Добавить в категории медиа-вставки

Вопрос или проблема

На данный момент WordPress 6.2, Openverse был интегрирован в wordpress и доступен в разделе Медиа Вставки.

Я хочу разработать плагин, который также интегрирует другую службу стоковых изображений в вкладку Медиа Вставки, но при просмотре документации и исходного кода, похоже, нет никаких хуков, в которые я мог бы это вставить.

Насколько я знаю, категории зарегистрированы в константе inserterMediaCategories в js редактора. Есть ли способ добавить к этому в плагине?

вставьте описание изображения здесь

Вы можете использовать пример из block-editor.js и адаптировать его под ваши требования:

wp.data.dispatch('core/block-editor').registerInserterMediaCategory( {
    name: 'openverse',
    labels: {
        name: 'Openverse',
        search_items: 'Поиск в Openverse',
    },
    mediaType: 'image',
    async fetch( query = {} ) {
        const defaultArgs = {
            mature: false,
            excluded_source: 'flickr,inaturalist,wikimedia',
            license: 'pdm,cc0',
        };
        const finalQuery = { ...query, ...defaultArgs };
        // Иногда вам может понадобиться сопоставить поддерживаемые параметры запроса в соответствии с `InserterMediaRequest`.
        // интерфейсом. В этом примере параметр запроса `search` называется `q`.
        const mapFromInserterMediaRequest = {
            per_page: 'page_size',
            search: 'q',
        };
        const url = new URL( 'https://api.openverse.org/v1/images/' );
        Object.entries( finalQuery ).forEach( ( [ key, value ] ) => {
            const queryKey = mapFromInserterMediaRequest[ key ] || key;
            url.searchParams.set( queryKey, value );
        } );
        const response = await window.fetch( url, {
            headers: {
                'User-Agent': 'WordPress/inserter-media-fetch',
            },
        } );
        const jsonResponse = await response.json();
        const results = jsonResponse.results;
        return results.map( ( result ) => ( {
            ...result,
            // Если ваш результат ответа включает свойство `id`, к которому вы хотите получить доступ позже, оно должно
            // быть сопоставлено со свойством `sourceId` `InserterMediaItem`. Это может быть полезно, если вы предоставляете
            // геттер URL отчета.
            // Кроме того, вы всегда должны очищать значение `id` ваших результатов ответа, потому что
            // оно используется для идентификации медиа-объектов WordPress.
            sourceId: result.id,
            id: undefined,
            caption: result.caption,
            previewUrl: result.thumbnail,
        } ) );
    },
    getReportUrl: ( { sourceId } ) =>
        `https://wordpress.org/openverse/image/${ sourceId }/report/`,
    isExternalResource: true,
});

Простой пример, который просто возвращает статическое изображение, будет выглядеть так:

wp.data.dispatch('core/block-editor').registerInserterMediaCategory({
    name: 'my-images',
    labels: {
        name: 'my-images',
        search_items: 'Поиск my-images',
    },
    mediaType: 'image',
    async fetch(query = {}) {
        // Результат статического изображения
        const results = [
            {
                url: 'https://cdn.pixabay.com/photo/2024/09/30/08/11/bird-9085008_1280.jpg',
                previewUrl: 'https://cdn.pixabay.com/photo/2024/09/30/08/11/bird-9085008_1280.jpg',
                id: 9085008,
                caption: 'тест',
                thumbnail: 'https://cdn.pixabay.com/photo/2024/09/30/08/11/bird-9085008_1280.jpg',
            }
        ];

        return results.map(result => ({
            ...result,
            sourceId: result.id,
            id: undefined,
            caption: result.caption,
            previewUrl: result.thumbnail,
        }));
    },
    isExternalResource: true,
});

Ответ или решение

Чтобы добавить новые категории медиа в интерфейс вставки WordPress, начиная с версии 6.2, необходимо разработать плагин, который будет расширять функциональность редактора блоков. В этом ответе я подробно опишу, как это сделать, используя доступные API и функции WordPress.

Шаг 1: Создание структуры плагина

Создайте папку для вашего плагина в каталоге wp-content/plugins/. Например, назовите ее my-custom-media-inserter. Внутри этой папки создайте файл my-custom-media-inserter.php, который будет основным файлом вашего плагина.

Шаг 2: Основной файл плагина

<?php
/**
 * Plugin Name: My Custom Media Inserter
 * Description: Расширяет интерфейс вставки медиа для добавления новой категории.
 * Version: 1.0
 * Author: Ваше имя
 */

// Зафиксируйте, что плагин активен и подключен
defined('ABSPATH') || exit;

// Подключаем скрипты в админке
function my_custom_media_inserter_enqueue_scripts() {
    wp_enqueue_script(
        'my-custom-media-inserter-script',
        plugins_url('media-inserter.js', __FILE__),
        array('wp-data', 'wp-element', 'wp-editor'),
        '1.0',
        true
    );
}
add_action('enqueue_block_editor_assets', 'my_custom_media_inserter_enqueue_scripts');

Шаг 3: Создание JavaScript файла

Создайте файл media-inserter.js в папке вашего плагина. В этом файле вы будете регистрировать новую категорию медиа в интерфейсе вставки:

wp.data.dispatch('core/block-editor').registerInserterMediaCategory({
    name: 'my-images',
    labels: {
        name: 'Мои изображения',
        search_items: 'Поиск в Мои изображения',
    },
    mediaType: 'image',
    async fetch(query = {}) {
        // Пример с статическим изображением
        const results = [
            {
                url: 'https://cdn.pixabay.com/photo/2024/09/30/08/11/bird-9085008_1280.jpg',
                previewUrl: 'https://cdn.pixabay.com/photo/2024/09/30/08/11/bird-9085008_1280.jpg',
                id: 9085008,
                caption: 'Тестовое изображение',
                thumbnail: 'https://cdn.pixabay.com/photo/2024/09/30/08/11/bird-9085008_1280.jpg',
            }
        ];

        return results.map(result => ({
            ...result,
            sourceId: result.id,
            id: undefined,
            caption: result.caption,
            previewUrl: result.thumbnail,
        }));
    },
    isExternalResource: true,
});

Шаг 4: Активируйте плагин

После завершения разработки плагина, перейдите в админку WordPress и активируйте ваш плагин через раздел "Плагины".

Шаг 5: Проверка функциональности

Теперь, когда вы откроете редактор блоков WordPress и перейдете к вкладке медиа для вставки, вы должны увидеть новую категорию "Мои изображения". Она будет содержать удобный интерфейс для вставки изображений, который вы можете настроить и расширить в соответствии с вашими требованиями.

Важные моменты

  1. Безопасность: Убедитесь, что ваши HTTP-запросы к API сторонних сервисов безопасны и обрабатывают ошибки корректно.
  2. SEO-оптимизация: Используйте описания для изображений и других медиа, чтобы улучшить индексацию вашего контента.
  3. Перевод: Чтобы сделать ваш плагин многоязычным, рекомендуется использовать функции локализации.

Следуя этим инструкциям, вы сможете создать плагин, который интегрирует дополнительные категории медиа в интерфейс вставки WordPress, улучшая пользовательский опыт и расширяя возможности редактора блоков.

Оцените материал
Добавить комментарий

Капча загружается...