Weisen Sie dem Posten mit der REST-API eine benutzerdefinierte Taxonomie zu
Lesezeit: 4 Minuten
ProEvilz
Ich benutze die eingebaute WP-REST-API zum Erstellen von Beiträgen (benutzerdefinierter Beitragstyp). Ich habe diesen Teil zum Laufen gebracht, unten ist ein Beispiel für JSON, das ich einreiche, um einen neuen Beitrag zu erstellen.
{
"title": "The story of Dr Foo",
"content": "This is the story content",
"status":"publish",
"excerpt":"Dr Foo story"
}
Problem ist, wie übergebe ich auch welche Taxonomien zuzuweisen? Ich kann anscheinend keine Spur von jemandem finden, der fragt, oder wie es geht?
Für den Kontext, server 1 erstellt die Beiträge und WP existiert auf server 2.
Ich habe auch versucht lange Metadaten mit dem Request zu übergeben, die ich dann auf dem WP-Server umschleifen und die Taxonomien entsprechend mit setzen kann wp_set_post_terms().
Dazu gibt es (fast) rest_insert_{$this->post_type} das ausgelöst wird, nachdem ein einzelner Beitrag über die REST-API erstellt oder aktualisiert wurde.
Das Problem bei dieser Methode ist, dass die Metadaten erst NACH dem gesetzt werden action_rest_insert_post_type() Funktion ist beendet. Dies bedeutet, dass, wenn ich versuche, die Metadaten der aktuellen Beiträge abzurufen, diese nicht vorhanden sind.
function action_rest_insert_post_type( $post, $request, $true ) {
$items = get_post_meta( $post->ID); // at this point in time, returns empty array.
//wp_set_terms()
}
Das habe ich bestätigt $post->ID funktioniert wie erwartet, es ist nur so, dass die Metadaten nicht vollständig gesetzt sind …
Bitte beraten.
Übersehe ich etwas, oder sollten Sie in der Lage sein, die Daten weiterzugeben und damit zu arbeiten? action_rest_insert_post_type() von $anfrage? Mit der restlichen API bin ich noch nicht in Kontakt gekommen, aber aus der Dokumentation klingt das möglich. Welche Metadaten haben Sie dort erwartet?
– Jan
13. November 2017 um 14:18 Uhr
@janh Das war ursprünglich mein Plan … aber wie oben erklärt, get_post_meta() gibt ein leeres Array zurück action_rest_insert_post_type() weil die Metadaten zu diesem Zeitpunkt noch nicht fertig eingestellt sind. Die erwarteten Metadaten sind nur Daten aus benutzerdefinierten Feldern (Taxonomie), die zum Festlegen der Taxonomien verwendet werden (da dies in der Anfrage selbst nicht möglich ist).
– ProEvilz
13. November 2017 um 14:20 Uhr
Ja, aber es sollte nicht als Metadaten verfügbar sein, sondern in $request imho – hast du diese Variable var_export() gemacht, um zu sehen, was dir zur Verfügung steht? Wenn dies nicht der Fall ist, werde ich versuchen, dies in einer lokalen Installation zu replizieren.
– Jan
13. November 2017 um 14:25 Uhr
Es ist erhältlich in $request aber $request hat eine Art “geschützten” Status, der ihm unzugänglich macht
Ich habe Post verwendet, aber das sollte bei benutzerdefinierten Post-Typen nicht anders sein, ändern Sie einfach die Aktion, in die es einsteigt. Das funktioniert gut für mich, wenn ich mit so etwas angerufen werde:
{
"title": "The story of Dr Foo",
"content": "This is the story content",
"status":"publish",
"excerpt":"Dr Foo story",
"terms": {
"mytaxonomy": [ "myterm", "anotherterm" ]
}
}
Wenn Sie diese Daten per POST senden möchten, müssen Sie den Weg ändern, um die Parameter zu erhalten
Vielen Dank. Es wird als Post verschickt und get_json_params() funktioniert immer noch gut. musste ich auch benutzen wp_set_object_terms() um es zum Laufen zu bringen.
– ProEvilz
13. November 2017 um 16:35 Uhr
nach ein paar Stunden funktioniert es bei mir auch… Vielleicht hilft es dem einen oder anderen, wenn ich meine Lösung auch hier poste
das ist meine Funktion basierend auf der functions.php
Übersehe ich etwas, oder sollten Sie in der Lage sein, die Daten weiterzugeben und damit zu arbeiten?
action_rest_insert_post_type()
von $anfrage? Mit der restlichen API bin ich noch nicht in Kontakt gekommen, aber aus der Dokumentation klingt das möglich. Welche Metadaten haben Sie dort erwartet?– Jan
13. November 2017 um 14:18 Uhr
@janh Das war ursprünglich mein Plan … aber wie oben erklärt,
get_post_meta()
gibt ein leeres Array zurückaction_rest_insert_post_type()
weil die Metadaten zu diesem Zeitpunkt noch nicht fertig eingestellt sind. Die erwarteten Metadaten sind nur Daten aus benutzerdefinierten Feldern (Taxonomie), die zum Festlegen der Taxonomien verwendet werden (da dies in der Anfrage selbst nicht möglich ist).– ProEvilz
13. November 2017 um 14:20 Uhr
Ja, aber es sollte nicht als Metadaten verfügbar sein, sondern in
$request
imho – hast du diese Variable var_export() gemacht, um zu sehen, was dir zur Verfügung steht? Wenn dies nicht der Fall ist, werde ich versuchen, dies in einer lokalen Installation zu replizieren.– Jan
13. November 2017 um 14:25 Uhr
Es ist erhältlich in
$request
aber$request
hat eine Art “geschützten” Status, der ihm unzugänglich macht– ProEvilz
13. November 2017 um 14:26 Uhr