Php 为什么可以';我是否从WP_REST_请求访问查询参数?

Php 为什么可以';我是否从WP_REST_请求访问查询参数?,php,wordpress,wordpress-rest-api,Php,Wordpress,Wordpress Rest Api,在我的博客上,我试图创建一个端点,以便使用ajax加载更多的文章。但是,查询字符串参数似乎没有传递给我的函数。 这是我的代码,所有代码都在function.php文件中: add_action( 'rest_api_init', function () { register_rest_route( 'blog', '/articles', array( 'methods' => WP_REST_Server::READABLE, 'callback' => 'lo

在我的博客上,我试图创建一个端点,以便使用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)
}
这几乎就像是在到达我的函数之前从请求对象中删除了参数。


对象属性受保护,因此无法使用标准方法获取它们,即使您要访问,也会遇到
致命错误

然而,我试图通过首先将对象转换为数组来访问值,然后循环遍历每个项目并获得所需的内容。

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
值,您需要根据自己的喜好调整循环。

您可以通过
WP\u REST\u Request::get\u query\u params()访问查询参数。

或者,您可以使用

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

但这会将
$\u POST
$\u GET
和路径参数按该顺序合并

尝试使用不同的路由,可能它与某个地方现有的slug冲突?您找到解决方案了吗?我面临着完全相同的问题。仅当rest路由在注销状态下被访问时发生。您能刷新一下吗?这个load_more(WP_REST_Request$Request),WP_REST_Request的主要用途是什么?它是一个函数、一个参数、一个预期的东西还是一个回调?
$tag = $request->get_param('tag');