Получение выбранных терминов для пользовательских таксономий в редакторе

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

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

wp.data.select("core/editor").getCurrentPostAttribute("categories")

Однако это, кажется, не срабатывает с пользовательскими таксономиями, созданными с помощью register_taxonomy(). Есть ли другой способ сделать это?

Этот мердж кажется связанным, но мне довольно трудно понять, что там реализуется.

Когда вы регистрируете пользовательскую таксономию, убедитесь, что вы установили show_in_rest в true. Таким образом, таксономия будет отображаться в REST API, который использует Gutenberg для получения данных. Тогда вы можете использовать селектор:

wp.data.select("core/editor").getCurrentPostAttribute("my_taxonomy");

Удивительно, как мало информации доступно по этой теме. Вот моё решение для извлечения выбранных терминов для пользовательской таксономии:

const taxonomySlug = 'your-taxonomy';

// Получить выбранные ID серий
const selectedSeries = useSelect(( select ) =>
    select('core/editor').getEditedPostAttribute(taxonomySlug),
);

// Получить все термины серий
const seriesTerms = useSelect(( select ) =>
    select('core').getEntityRecords('taxonomy', taxonomySlug, {
        object_id: postId,
    }),
);

// Отфильтровать выбранные термины на основе выбранных ID серий
const selectedTerms = seriesTerms
    ? seriesTerms.filter(( term ) => selectedSeries.includes(term.id))
    : [];

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

Для получения выбранных терминов для пользовательских таксономий в редакторе Gutenberg, вам необходимо следовать некоторым основным шагам. Убедитесь, что ваша таксономия правильно зарегистрирована и доступна через REST API, так как именно его использует Gutenberg для получения данных.

Шаг 1: Регистрация таксономии

При регистрации вашей пользовательской таксономии с помощью функции register_taxonomy, убедитесь, что параметр show_in_rest установлен в true. Это позволяет таксономии быть доступной через REST API.

function my_custom_taxonomy() {
    register_taxonomy('my_taxonomy', 'post', array(
        'label' => __('My Taxonomy'),
        'show_in_rest' => true, // Обязательно
        'rest_base' => 'my_taxonomy', // По желанию
        'hierarchical' => true,
    ));
}
add_action('init', 'my_custom_taxonomy');

Шаг 2: Получение выбранных терминов с помощью JavaScript

Для получения выбранных терминов пользовательской таксономии в редакторе Gutenberg вы можете использовать следующий код:

import { useSelect } from '@wordpress/data';

const MyCustomComponent = ( { postId } ) => {
    const taxonomySlug = 'my_taxonomy'; // Замените на ваш слаг таксономии

    // Получение выбранных ID терминов
    const selectedTermsIds = useSelect( ( select ) =>
        select( 'core/editor' ).getEditedPostAttribute( taxonomySlug )
    );

    // Получение всех терминов для данной таксономии
    const allTerms = useSelect( ( select ) =>
        select( 'core' ).getEntityRecords( 'taxonomy', taxonomySlug, {
            object_id: postId,
        } )
    );

    // Фильтрация по выбранным ID
    const selectedTerms = allTerms
        ? allTerms.filter( ( term ) => selectedTermsIds.includes( term.id ) )
        : [];

    // Теперь вы можете использовать selectedTerms для дальнейшей обработки
    return (
        <div>
            <h2>Выбранные термины:</h2>
            <ul>
                {selectedTerms.map((term) => (
                    <li key={term.id}>{term.name}</li>
                ))}
            </ul>
        </div>
    );
};

Объяснение кода

  1. useSelect: Используется для получения данных из состояния редактора и API WordPress. Мы сначала получаем ID выбранных терминов для нашей таксономии, а затем получаем все термины.

  2. Фильтрация: После этого мы фильтруем все термины, чтобы оставить только те, которые были выбраны в редакторе.

  3. Отображение: Выбранные термины затем выводятся в виде списка.

Заключение

Эти шаги должны помочь вам получить выбранные термины для пользовательских таксономий в редакторе Gutenberg. Убедитесь, что ваша таксономия доступна через REST API, и используйте приведённый выше код для извлечения и фильтрации выбранных терминов. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

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

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