Вопрос или проблема
После прочтения этого ответа здесь, я могу получить текущие выбранные/отмеченные термины для категорий, используя этот код:
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>
);
};
Объяснение кода
-
useSelect
: Используется для получения данных из состояния редактора и API WordPress. Мы сначала получаем ID выбранных терминов для нашей таксономии, а затем получаем все термины. -
Фильтрация: После этого мы фильтруем все термины, чтобы оставить только те, которые были выбраны в редакторе.
-
Отображение: Выбранные термины затем выводятся в виде списка.
Заключение
Эти шаги должны помочь вам получить выбранные термины для пользовательских таксономий в редакторе Gutenberg. Убедитесь, что ваша таксономия доступна через REST API, и используйте приведённый выше код для извлечения и фильтрации выбранных терминов. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.