在我的博客上,我试图创建一个端点,以便使用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)
}
几乎就像参数在到达我的函数之前已从请求对象中删除。
答案 0 :(得分:1)
您可以通过WP_REST_Request::get_query_params()
访问查询参数:
$queryParams = $request->get_query_params();
$tag = $queryParams['tag'];
或者您可以使用
$tag = $request->get_param('tag');
但这会按此顺序合并$_POST
,$_GET
和路径参数
答案 1 :(得分:0)
对象属性受到保护,因此即使您要访问,也无法使用标准方法来获取它们,而您将遇到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
值,您需要根据自己的喜好调整循环。