Warum kann ich nicht auf die Abfrageparameter von WP_REST_Request zugreifen?

Lesezeit: 3 Minuten

In meinem Blog versuche ich, einen Endpunkt zu erstellen, um mehr Artikel mit Ajax zu laden. Die Parameter der Abfragezeichenfolge scheinen jedoch nicht an meine Funktion weitergegeben zu werden. Hier ist mein Code, alles davon ist in der function.php Datei:

add_action( 'rest_api_init', function () {
  register_rest_route( 'blog', '/articles', array(
    'methods' => WP_REST_Server::READABLE,
    'callback' => 'load_more'
  ));
});

function load_more(WP_REST_Request $request) {
  var_dump($request->has_valid_params());
  var_dump($request->get_params());
  var_dump($request);
}

Und hier ist, was dies zurückgibt, wenn ich anrufe /wp-json/blog/articles/?lang=en&tag=test :

bool(true)

array(0) {}

object(WP_REST_Request)#2259 (8) {
  ["method":protected]=>
  string(3) "GET"
  ["params":protected]=>
  array(6) {
    ["URL"]=>
    array(0) {
    }
    ["GET"]=>
    array(0) {
    }
    ["POST"]=>
    array(0) {
    }
    ["FILES"]=>
    array(0) {
    }
    ["JSON"]=>
    NULL
    ["defaults"]=>
    array(0) {
    }
  }
  ["body":protected]=>
  string(0) ""
  ["route":protected]=>
  string(14) "/blog/articles"
  ["attributes":protected]=>
  array(6) {
    ["methods"]=>
    array(1) {
      ["GET"]=>
      bool(true)
    }
    ["accept_json"]=>
    bool(false)
    ["accept_raw"]=>
    bool(false)
    ["show_in_index"]=>
    bool(true)
    ["args"]=>
    array(0) {
    }
    ["callback"]=>
    string(9) "load_more"
  }
  ["parsed_json":protected]=>
  bool(true)
  ["parsed_body":protected]=>
  bool(false)
}

Es ist fast so, als ob die Parameter aus dem Anforderungsobjekt gelöscht wurden, bevor sie meine Funktion erreichten.

  • Versuchen Sie es mit einer anderen Route, vielleicht steht sie irgendwo im Konflikt mit dem vorhandenen Slug?

    – Lukas Bustamante

    28. November 2018 um 19:06 Uhr

  • Hast du eine Lösung gefunden? Ich stehe vor genau dem gleichen Problem. Tritt nur auf, wenn im abgemeldeten Zustand auf die Restroute zugegriffen wird.

    – Akshay Raje

    16. September 2019 um 19:10 Uhr

  • Könntest du mich etwas auffrischen? Dieses load_more(WP_REST_Request $request), was ist der Hauptzweck von WP_REST_Request? ist es eine Funktion, ein Parameter, etwas Erwartetes oder ein Callback?

    – Porzellan80

    31. August 2020 um 13:09 Uhr

Sie können auf Abfrageparameter zugreifen über WP_REST_Request::get_query_params():

$queryParams = $request->get_query_params();
$tag = $queryParams['tag'];

Alternativ können Sie verwenden

$tag = $request->get_param('tag');

aber das verschmilzt $_POST, $_GET und Pfadparameter in dieser Reihenfolge

Die Objekteigenschaften sind geschützt, daher ist es nicht möglich, sie mit der Standardmethode abzurufen, selbst wenn Sie darauf zugreifen möchten, werden Sie mit a konfrontiert Fatal Error.

Ich habe jedoch versucht, auf Werte zuzugreifen, indem ich zuerst das Objekt in ein Array umwandelte und dann jedes Element durchschleife und erhalte, was benötigt wird.

WP_REST_Request $request;
$request2 = (array)$request;
foreach($request2 as $req2) {
   if (is_array($req2)) {
     foreach($req2 as $req2_k => $req2_v) {
       if ($req2_k == 'cpt') {
          echo $req2_v;
       }
     }
   }
}

Wie Sie sehen, wollte ich erhalten cpt Wert ab attributes Array-Index, müssen Sie die Schleife nach Ihren Wünschen anpassen.

Wenn Sie einen Wert über POST REQUEST übergeben, können Sie darauf zugreifen, indem Sie verwenden get_body_params() Methode

add_action( 'rest_api_init', function () {
    register_rest_route( "nh", "v2/slug", array(
      'methods' => 'POST',
      'callback' => 'my_awesome_func',
    ) );
  } );



function my_awesome_func( $request  ) {
    $queryParams = $request->get_body_params();
    return $queryParams;
}

1245480cookie-checkWarum kann ich nicht auf die Abfrageparameter von WP_REST_Request zugreifen?

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

Privacy policy