WordPress REST API 定制化輸出 適用定制前端網站

WordPress REST API 定制化輸出

WordPress 自4.7 版本后與時俱進推出了REST API,如此一來想象空間又擴展了許多,如今WordPress 可以完全作為后端數據驅動了。本文通過幾個例子展示如何定制化輸出WordPress REST API 的相關數據。

文章數據(posts)禁止某些字段顯示

默認的,當請求類似 your-site.com/wp-json/wp/v2/posts?per_page=5&page=1 的接口來獲取文章列表,展示的不少字段對一般人來說是沒有必要。

WordPress REST API 定制化輸出

秉承“如無必要,勿增實體”的原則,減少請求時候的數據量,可以通過下面的代碼移除:


// https://devework.com/wordpress-rest-api-dynamic-output.html
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 字段,可以用下面的代碼啟用:


// https://devework.com/wordpress-rest-api-dynamic-output.html
register_rest_field( 'post', 'metadata', array(
 	'get_callback' => function ( $data ) {
 		return get_post_meta( $data['id'], '', '' );
 
 }, ));

輸出 post meta 特定字段

接上,如果你在REST API 中僅僅想輸出 post meta 特定字段而非全部,則通過類似下面代碼:


// https://devework.com/wordpress-rest-api-dynamic-output.html
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 字段,請按需使用。

借助 Nginx 控制 /wp-json 的訪問

這個倒與WordPress 本身無關了,your-site.com/wp-json 的路由默認是所有人皆可訪問。如果你基于服務器負載,或安全等方面考慮選擇性輸出,可以借助 Nginx 控制訪問。先看下面的例子:


# https://devework.com/wordpress-rest-api-dynamic-output.html
location /wp-json {
      if ($http_user_agent !~ '(iPhone|Android)'){
        return 403;
       }
try_files $uri $uri/ /index.php?$args;
}

如果你熟悉 Nginx 語法,就知道上面的代碼實現了:除了iOS 跟Android 設備(通過判斷請求頭的UA 信息),其它訪問 /wp-json 的路徑均返回403 狀態碼。這在一定程度上起到了保護作用。

本文來源:DeveWork 適用 WordPress 微信小程序開發

相關推薦

微信掃一掃

微信掃一掃

微信掃一掃,分享到朋友圈

WordPress REST API 定制化輸出 適用定制前端網站
返回頂部

顯示

忘記密碼?

顯示

顯示

獲取驗證碼

Close
七星彩走势图500