Wie greife ich auf den Text einer WP-API-Anforderung in einer benutzerdefinierten Route zu?

11

Ich habe eine benutzerdefinierte Route in der WP-API (v2 Beta 4) erstellt, um eine Site-Option festzulegen. Ich verwende AngularJS, um den API-Aufruf durchzuführen, und aus irgendeinem Grund kann ich nicht auf die innerhalb der Anforderung gesendeten Daten zugreifen. Folgendes habe ich bisher:

gvl.service('gvlOptionService', ['$http', function($http) {

    this.updateOption = function(option, value) {

        return $http({
          method  : 'POST',
          url     : wpAPIdata.gvlapi_base + 'options',
          data    : { "option" : option,
                      "value" : value
                    },
          headers : { 'Content-Type': 'application/x-www-form-urlencoded',
                      'X-WP-Nonce' : wpAPIdata.api_nonce
                    }  
         })

    }

}]);

Dadurch wird die Anfrage erfolgreich gesendet und die veröffentlichten Daten sehen ungefähr so ​​aus:

{"option":"siteColor","value":"ff0000"}

Die Anfrage gelangt erfolgreich zu meiner benutzerdefinierten Route und zu dem von mir angegebenen Rückruf. Hier ist diese Rückruffunktion innerhalb der Klasse:

public function update_option( WP_REST_Request $request ) {

    if(isset($request['option']) && $request['option'] == 'siteColor') {
        $request_prepared = $this->prepare_item_for_database($request);
        $color_updated = update_option('site_color', $request_prepared['value'], false);

        if($color_updated) {
            $response = $this->prepare_item_for_response('site_color');
            $response->set_status( 201 );
            $response->header('Location', rest_url('/gvl/v1/options'));
            return $response;
        } else {
            // ...
        }


    } else {
        return new WP_Error( 'cant_update_option', __( 'Cannot update option.' ), array( 'status' => 400 ) );
    }

}

Das Problem ist, dass dies immer fehlschlägt und den WP_Error zurückgibt, da $ request ['option'] null ist.

Wenn ich var_dump ($ request) verwende, wird die JSON-Zeichenfolge im Abschnitt ['body'] des Objekts angezeigt, aber ich kann nicht darauf zugreifen, wenn ich diesen Teil des Arrays aufrufe. Ich habe auch versucht, die in der Dokumentation ( http://v2.wp-api.org/extending/adding/ ) angegebenen Methoden zum Abrufen von Parametern zu verwenden , aber keine davon scheint die Daten zurückzugeben. Vermisse ich hier etwas wirklich Grundlegendes?

Ryan Hale
quelle
Hast du Glück damit?
Jgraup

Antworten:

6

In einer früheren Antwort konnte auf die Daten in einem benutzerdefinierten Endpunkt mit zugegriffen werden

$parameters = $request->get_query_params(); 

Überprüfen Sie die Abfrageparameter auf option

$parameters['option']

<?php
function my_awesome_func( WP_REST_Request $request ) {
    // You can access parameters via direct array access on the object:
    $param = $request['some_param'];

    // Or via the helper method:
    $param = $request->get_param( 'some_param' );

    // You can get the combined, merged set of parameters:
    $parameters = $request->get_params();

    // The individual sets of parameters are also available, if needed:
    $parameters = $request->get_url_params();
    $parameters = $request->get_query_params();
    $parameters = $request->get_body_params();
    $parameters = $request->get_default_params();

    // Uploads aren't merged in, but can be accessed separately:
    $parameters = $request->get_file_params();
}
jgraup
quelle
5

Sie können verwenden $request->get_body()

Gerardlamo
quelle
5

Sie können verwenden, $request->get_json_params()was ein Array von Schlüssel => Werten zurückgibt.

Mit diesen Bedingungen (möglicherweise ein paar mehr):

  1. Der Client, der die Anfrage sendet, hat Content-Type: application/jsonim Header
  2. Es gibt einen rohen Körper wie {"option":"siteColor","value":"ff0000"}.

https://developer.wordpress.org/reference/classes/wp_rest_request/get_json_params/

mkly
quelle
Genau das habe ich gesucht. Vielen Dank!
Jason Ellis