Ich möchte eine Dropdown-Liste mit Kategorien (oder anderen Taxonomien) in einem Gutenberg-Block anzeigen. Ich kann mir dazu nur zwei Möglichkeiten vorstellen:
wp_localize_script
, um diese Daten meinem Block-Javascript zur Verfügung zu stellen.fetch()
? Im Block erreichen Sie die API unter/wp-json/wp/v2/categories/und erhalten alle Kategorien.Ist eine davon die bevorzugte Methode? Gibt es eine andere Art von eingebautem oder besserem Weg, dies zu tun?
Während ich dies weiter erforsche, habe ich von einer anderen Methode erfahren, die im Gutenberg-Plugin verfügbar ist und vermutlich verfügbar ist, sobald dieser Editor Teil des Kerns wird: wp.apiFetch()
. Anscheinend ist es ein Wrapper Around Fetch, der einige der unnötigen Teile versteckt. Jetzt frage ich mich, ob dies die bevorzugte Methode ist.
wp.apiFetch()
im Block, um die REST-API unter/wp/v2/categories zu erreichen und alle Kategorien abzurufen.Auf den ersten Blick erscheint es sinnvoller, die Funktion apiFetch () zu verwenden. Da dies jedoch asynchron ist, werden die Daten nicht in das JSX-Element geladen. Ich bin nicht sicher, wie ich diese Daten in das Element laden soll.
Laden Sie die Elemente mit einer Funktion wie der folgenden in eine Konstante:
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;
});
Verwenden Sie dann postSelections als Element "Optionen".
el(
wp.components.SelectControl,
{
label: __('Select a Post'),
help: 'Select a post to display as a banner.',
options: postSelections,
value: selectedPost,
onChange: onChangePost
}
),
Sie benötigen keine apiFetch
oder Lokalisierung, um eine Liste aller Kategorien zu erhalten. Sie können dies mit dem Modul wp.data
tun:
wp.data.select('core').getEntityRecords('taxonomy', 'category');
Weitere Informationen finden Sie im Gutenberg-Handbuch zu Kerndaten.