グーテンベルクブロックの中にカテゴリ(または他の分類法)のドロップダウンリストを表示したいです。これを行うには2つの方法しか考えられません。
wp_localize_script
を使用してそのデータを私のブロックJavaScriptで使用できるようにします。fetch()
を使いますか? /wp-json/wp/v2/categories/ でapiにアクセスするブロック内で、すべてのカテゴリを取得します。これらのうちの1つが好ましい方法ですか?これを行うための他の種類の組み込みまたはより良い方法はありますか?
私はこれを研究し続けているうちに、グーテンベルクプラグインで利用可能な、そしておそらくこのエディタがコアの一部になったときに利用可能な別の方法を学んだ: wp.apiFetch()
。どうやら、それは不要な部分の一部を隠すフェッチのラッパーです。今、私はこれが望ましい方法かどうか疑問に思います。
wp.apiFetch()
を使用して /wp/v2/categories にあるRESTapiにアクセスし、すべてのカテゴリを取得します。一見したところ、apiFetch()関数を使用する方が理にかなっているようです。ただし、これは非同期なので、データはJSX要素にロードされません。そのデータを要素にロードする方法がわかりません。
このような関数を使用して要素を定数にロードします。
const postSelections = [];
const allPosts = wp.apiFetch({path: "/wp/v2/posts"}).then(posts => {
postSelections.Push({label: "Select a Post", value: 0});
$.each( posts, function( key, val ) {
postSelections.Push({label: val.title.rendered, value: val.id});
});
return postSelections;
});
それからpostSelectionsをあなたの要素 "options"として使います。
el(
wp.components.SelectControl,
{
label: __('Select a Post'),
help: 'Select a post to display as a banner.',
options: postSelections,
value: selectedPost,
onChange: onChangePost
}
),
すべてのカテゴリのリストを取得するのにapiFetch
やローカライズは必要ありません。 wp.data
モジュールでこれを行うことができます。
wp.data.select('core').getEntityRecords('taxonomy', 'category');
詳細については、Core Dataの Gutenberg Handbook エントリを参照してください。