目录
首页 笔记 详情

WordPress reset api 新增文章自定义字段数据以及去除字段


正常wp-rest-api输出的内容是不包含自定义字段的,以json形式输出WordPress文章内容默认是没有添加自定义字段数据的,如果需要使用,可以使用下面的方法。

// 新增api
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( 'post', 'post-meta-fields', 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 );
}

文章数据(posts)禁止某些字段显示

默认的,当请求类似 your-site.com/wp-json/wp/v2/posts?per_page=5&page=1 的接口来获取文章列表,展示的不少字段对一般人来说是没有必要。

function dw_rest_prepare_post( $data, $post, $request ) {
 
	$_data = $data->data;
 
	$params = $request->get_params();
 
	// if ( ! isset( $params['id'] ) ) {
 
		unset( $_data['excerpt'] );
 
		unset( $_data['author'] );
 
		unset( $_data['featured_media'] );
 
		unset( $_data['format'] );
 
		unset( $_data['ping_status'] );
 
		unset( $_data['comment_status'] );
 
		unset( $_data['sticky'] );
 
		unset( $_data['template'] );
 
	// }
 
	$data->data = $_data;
 
	return $data;
 
}
 
add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );

文章数据(posts)中输出 post meta 所有字段

可能考虑到数据隐私,文章数据(posts)默认并不显示post meta的相关字段,如果你需要输出对应文章下所有 post meta 字段,可以用下面的代码启用:


register_rest_field( 'post', 'metadata', array(
 
 	'get_callback' => function ( $data ) {
 
 		return get_post_meta( $data['id'], '', '' );
 
 }, ));

输出 post meta 特定字段

接上,如果你在REST API 中仅仅想输出 post meta 特定字段而非全部,则通过类似下面代码:


function dw_rest_prepare_post( $data, $post, $request ) {
 
	$_data = $data->data;
 
	$params = $request->get_params();
 
	$thumb =  get_post_meta( $post->ID, 'thumb' );
 
		if($thumb){
 
			$_data['thumb_image'] = $thumb;
 
		}	
 
	$data->data = $_data;
 
	return $data;
 
}
 
add_filter( 'rest_prepare_post', 'dw_rest_prepare_post', 10, 3 );

上面的代码展示的是如何输出thumb 这个 post meta 字段,请按需使用。


写笔记

咨询

您的电子邮箱地址不会被公开。 必填项已用*标注