Как выбрать объекты категории в редакторе блоков?

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

Я использую следующие функции, чтобы получить объекты выбранных категорий. Кажется, что они всегда возвращают ноль совпадений, хотя их несколько. Что я здесь упустил?

(function (wp) {
    const { useSelect, select, dispatch } = wp.data;
    const { subscribe } = wp.data;

    function getSelectedCategories() {
        const selectedCategories = select('core/editor').getEditedPostAttribute('categories');

        const categories = select('core').getEntityRecords('taxonomy', 'category');

        if (!categories || !selectedCategories || selectedCategories.length === 0) {
            return [];
        }

        return categories.filter(cat => selectedCategories.includes(cat.id));
    }
}

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

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

Вот обновлённый пример функции getSelectedCategories, который включает отдельные проверки и обеспечивает правильное извлечение объектов категорий:

(function (wp) {
    const { useSelect, select } = wp.data;

    function getSelectedCategories() {
        // Получаем выбранные категории из поста
        const selectedCategories = select('core/editor').getEditedPostAttribute('categories');
        // Получаем все категории
        const categories = select('core').getEntityRecords('taxonomy', 'category');

        // Проверка на наличие полученных категорий и выбранных категорий
        if (!Array.isArray(selectedCategories) || selectedCategories.length === 0 || !Array.isArray(categories)) {
            return [];
        }

        // Фильтруем категории по выбранным идентификаторам
        return categories.filter(cat => selectedCategories.some(selected => selected.id === cat.id));
    }

    // Пример использования функции
    const selectedCategories = getSelectedCategories();
    console.log(selectedCategories);
})(wp);

Объяснение внесённых изменений:

  1. Проверка на массив: Я добавил проверки, чтобы убедиться, что selectedCategories и categories являются массивами, прежде чем выполнять дальнейшие операции.

  2. Фильтрация по идентификатору: В вашем изначальном коде использовался метод includes, однако в случае, если selectedCategories представляет собой массив объектов с полем id, вам следует использовать метод some для проверки наличия соответствующего объекта.

  3. Пример использования: Я добавил пример использования функции с выводом результата в консоль, что поможет в отладке.

Следуйте этому подходу, и вы сможете успешно извлекать объекты выбранных категорий в редакторе блоков WordPress. Проверьте также, что на вашем посте действительно существуют выбранные категории, и что они корректно сохранены в редакторе.

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

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