WordPressのカスタムブロックで、その投稿のカテゴリ / タグを取得する


そのままデータが取れる系のAPIが見当たらない様子だったので、作ってみました。

コード

import { useSelect } from '@wordpress/data';
const useCurrentPostCategories = () => {
	const categoryIds = wp.data.select('core/editor').getEditedPostAttribute('categories')
	return useSelect((select) => {
		const {getEntityRecords} = select('core')
		const taxonomies = getEntityRecords('taxonomy', 'category')
		if (!taxonomies) return []
		const currentCategories = taxonomies.filter(taxonomy => {
			return categoryIds.includes(taxonomy.id)
		})
		return currentCategories
	}, [categoryIds])
}

import { useSelect } from '@wordpress/data';
const useCurrentPostTags = () => {
	const tagIds = wp.data.select('core/editor').getEditedPostAttribute('tags')
	return useSelect((select) => {
		const {getEntityRecords} = select('core')
		const taxonomies = getEntityRecords('taxonomy', 'post_tag')
		if (!taxonomies) return []
		const currentTags = taxonomies.filter(taxonomy => {
			return tagIds.includes(taxonomy.id)
		})
		return currentTags
	}, [tagIds])
}

余談

まとめてしまってもいいかと思ったのですが、今試しているやつだと無限ループが入ったのでわけています。
あと、このフックが実行されているブロックのrenderが実行されないと変わらないので、タグやカテゴリを変更してすぐに反応するというわけではありませんでした。