Weisen Sie dem Posten mit der REST-API eine benutzerdefinierte Taxonomie zu

Lesezeit: 4 Minuten

Benutzer-Avatar
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

    – ProEvilz

    13. November 2017 um 14:26 Uhr

function action_rest_insert_post( $post, $request, $true ) {
    $params = $request->get_json_params();
    if(array_key_exists("terms", $params)) {
        foreach($params["terms"] as $taxonomy => $terms) {
            wp_set_post_terms($post->ID, $terms, $taxonomy);
        }
    }
}

add_action("rest_insert_post", "action_rest_insert_post", 10, 3);

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

    $params = $request->get_body_params();

und sende die Daten als:

title=testtitle&content=testcotnent&status=publish&excerpt=testexcert&terms[mytaxonomy][]=myterm&terms[mytaxonomy][]=anotherterm

  • 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

mein Beitragstyp namens “Transaktionen”

function action_rest_insert_transaktionen( $post, $request, $true ) {
    $params = $request->get_json_params();
    if(array_key_exists("terms", $params)) {
        foreach($params["terms"] as $taxonomy => $terms) {
            wp_set_object_terms($post->ID, $terms, $taxonomy, true);
        }
    }
}
add_action("rest_insert_transaktionen", "action_rest_insert_transaktionen", 10, 3);

und das ist der json:

{'title': 'Test,
          'status': 'publish',
          'content': 'Text,
          'author': '1',
          'format': 'standard',
           "terms": {"person": ["Test"]}
}

1382790cookie-checkWeisen Sie dem Posten mit der REST-API eine benutzerdefinierte Taxonomie zu

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy