我有一个posttype“timeslip”,我使用以下API端点调用它:
/wp-json/wp/v2/timeslip?meta_key=user_id&meta_value=1
我已将自定义字段user\\u id公开给API元,并可以在响应中看到它。
add_filter(\'rest_timeslip_query\', array($this, \'timeslip_meta_request_params\'));
public function register_meta_api() {
// Meta Fields that should be added to the API
$timeslip_meta_fields = array(
\'user_id\',
\'total_time\',
\'start_time\',
\'end_time\',
);
// Meta
foreach ($timeslip_meta_fields as $field) {
register_rest_field(\'timeslip\',
$field,
array(
\'get_callback\' => array($this, \'get_meta\'),
\'update_callback\' => array($this, \'update_meta\'),
\'schema\' => null,
)
);
}
}
public function get_meta($object, $field_name) {
return get_post_meta($object[\'id\'], $field_name);
}
但是,未过滤任何内容。
public function timeslip_meta_request_params($args, $request) {
$args[\'meta_key\'] = $request[\'timeslip_user_id\'];
$args[\'meta_value\'] = intval($request[\'timeslip_user_id\']);
$valid_vars = array_merge( $args, array( \'meta_key\', \'meta_value\' ) );
return $valid_vars;
// $args[\'meta_key\'] = \'user_id\';
// $args[\'meta_value\'] = 1;
return $args;
}
如果我手动设置$args,那么它会起作用,所以我猜没有传入某些内容。
环顾四周,文档似乎发生了很大的变化,很难找到正确的方法来做到这一点。
非常感谢您的帮助!
最合适的回答,由SO网友:Roel Magdaleno 整理而成
在中添加第三个参数get_post_meta()
功能为true, 这将返回当前post meta的单个值,若您不设置它,它将返回一个值数组。
现在的情况是,在内部,查询试图将meta\\u值与数组进行比较,而不是与字符串或整数进行比较,这就是为什么您没有得到任何结果。
此外,如果您输入以下内容,则请求的数据应与当前端点中指示的查询参数同名:
/wp-json/wp/v2/timeslip?meta_key=user_id&meta_value=1
然后通过以下方式访问请求数据:
$request[\'meta_key\'];
$request[\'meta_value\'];
您最初将请求的数据设置为:
$request[\'timeslip_user_id\'];
$request[\'timeslip_user_id\'];
因此,您的查询筛选函数应该如下所示:
function timeslip_meta_request_params( $args, $request ) {
$args[\'meta_key\'] = $request[\'meta_key\'];
$args[\'meta_value\'] = $request[\'meta_value\'];
return $args;
}
我刚刚在本地环境中测试了代码,请检查
user_id 字段是字符串。希望if适合您: