我正在尝试为我的wordpress网站创建RESTAPI,该网站用于使用wordpress作业管理器插件列出设施。
我已经在\\插件\\ rest api \\插件中注册了我的自定义帖子《分类法》。php。
下面的API为我提供了所有带有默认响应的列表。
http://localhost/sports/wp-json/wp/v2/joblisting/
我想使用下面的代码在JSON响应中添加post-meta。
function slug_register_phone_number() {
register_rest_field( \'job_listing\',
\'phone\',
array(
\'get_callback\' => \'slug_get_phone_number\',
\'update_callback\' => null,
\'schema\' => null,
)
);
}
function slug_get_phone_number($post, $field_name, $request) {
return get_post_meta($post->id, \'_phone\' );
}
}
使用上述代码,我可以添加“phone”作为REST响应,但我总是得到phone=false的响应。它没有显示wp\\U Posteta表中的正确数据。
我已经遵循以下提到的链接以供参考。
http://v2.wp-api.org/extending/modifying/
插件详细信息。1、WP作业经理2。rest api
任何帮助都会非常有用。
最合适的回答,由SO网友:dan9vu 整理而成
$post
在callback function 是数组,而不是对象。所以你不能使用$post->id
. 将其更改为$post[\'id\']
它应该会起作用:
function slug_get_phone_number($post, $field_name, $request)
{
return get_post_meta($post[\'id\'], \'_phone\', true);
}
我建议更改
_phone
到
phone_number
或其他没有下划线前缀的内容。因为
_
通常与专用元密钥一起使用。尝试添加具有元键的自定义字段
_
直接在你的帖子前面加前缀,你就会明白我的意思了。
SO网友:Boris Kuzmanov
WP API具有rest_prepare_post
过滤器(或rest_prepare_CPT
如果您使用的是自定义贴子),则可以使用它修改JSON响应。在你的情况下rest_prepare_joblisting
.
function filter_joblisting_json( $data, $post, $context ) {
$phone = get_post_meta( $post->ID, \'_phone\', true );
if( $phone ) {
$data->data[\'phone\'] = $phone;
}
return $data;
}
add_filter( \'rest_prepare_joblisting\', \'filter_joblisting_json\', 10, 3 );
使用相同的过滤器,还可以从响应中删除字段/数据,并对数据进行任何操作。
SO网友:Nuwan
只需将此方法添加到函数中。php
add_action( \'rest_api_init\', \'create_api_posts_meta_field\' );
function create_api_posts_meta_field() {
// register_rest_field ( \'name-of-post-type\', \'name-of-field-to-return\', array-of-callbacks-and-schema() )
register_rest_field( \'tour\', \'metaval\', array(
\'get_callback\' => \'get_post_meta_for_api\',
\'schema\' => null,
)
);
}
function get_post_meta_for_api( $object ) {
//get the id of the post object array
$post_id = $object[\'id\'];
//return the post meta
return get_post_meta( $post_id );
}
SO网友:John Dee
下面是一个OOP示例:
class MetaDataFetcher{
public function enableAPIroute(){
add_action (\'rest_api_init\', array($this, \'doRegisterRoutes\'));
}
public function doRegisterRoutes(){
register_rest_route(
\'yournamespace/vXX\',
\'fetch-post-meta\',
array(
\'methods\' => array(\'GET\',\'POST\'),
\'callback\' => array($this, \'returnMetaData\'),
//You should have a better auth, or this endpoint will be exposed
permission_callback\' => function(){return TRUE;}
);
}
public function returnMetaData(){
if (!(isset($_REQUEST[\'post-id\']))){
return "ERROR: No post ID";
}
$postID = $_REQUEST[\'post-id\'];
$meta = get_post_meta($postID);
$meta = json_encode($meta);
return $meta;
}
}
$MetaDetaFetcher = New MetaDataFetcher;
$MetaDetaFetcher->enableAPIroute();