Почему я не могу получить доступ к параметрам запроса из WP_REST_Request? - PullRequest
0 голосов
/ 12 сентября 2018

В моем блоге я пытаюсь создать конечную точку, чтобы загружать больше статей, используя ajax. Однако параметры строки запроса, похоже, не передаются моей функции. Вот мой код, все это в файле function.php:

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);
}

А вот что возвращается, когда я звоню /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)
}

Это почти как параметры были удалены из объекта запроса до достижения моей функции.

1 Ответ

0 голосов
/ 27 июля 2019


Свойства объекта защищены, поэтому их невозможно получить стандартным способом, даже если вы захотите получить доступ, вы столкнетесь с Fatal Error.

Однако я попытался получить доступ к значениям, сначала преобразовав объект в массив, затем перебрав каждый элемент и получив то, что нужно.

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;
       }
     }
   }
}

Как видите, я хотел получить cpt значение из attributes индекса массива, вам нужно настроить цикл по своему вкусу.

...