使用 WordPress Rest API 發(fā)布文章時,首先我們需用通過 WordPress Rest API 進(jìn)行用戶認(rèn)證,然后我們就可以通過 Rest API 發(fā)布文章了,如果我們發(fā)布的是默認(rèn)的文章,很簡單,相信有點 Rest API 開發(fā)經(jīng)驗的朋友都可以搞定,如果需要提交 WordPress 文章之外的其他字段,事情就變得復(fù)雜了起來,因為 WordPress Rest API 中,文章接口接受的數(shù)據(jù)有限,只有 wp_posts 數(shù)據(jù)表中默認(rèn)的字段,如果我們需要提交自定義字段并且附加到當(dāng)前提交的文章,就要多做一些工作了。
我們來看下面的表單,其中,“Title of your story” 和 “Submission” 分別是文章的標(biāo)題和正文內(nèi)容,其他的字段都是自定義字段。

前端提交的數(shù)據(jù)格式
我們使用的是 React 開發(fā)的上面的表單,如果使用 jQuery、PHP、Python 或者其他語言開發(fā),處理過程是類似的。首先,我們需要獲取需要發(fā)送到 Rest API 接口的數(shù)據(jù),下面代碼中的 “values” 就是我們準(zhǔn)備要的數(shù)據(jù),其中的 ‘title’ 和 ‘content’ 是默認(rèn)的文章數(shù)據(jù),而 ‘metadata’ 是我們添加的一個自定義字段對象數(shù)組?!皊ubmitPost” 是封裝好的提交數(shù)據(jù)到 Rest API 的方法。
// 發(fā)布文章需要的數(shù)據(jù)
values.title = rawValues.title;
values.content = rawValues.content;
values.metadata = [
{'key' : 'name', 'value': rawValues.name},
{'key' : 'email', 'value': rawValues.email},
{'key' : 'topic', 'value': rawValues.topic},
{'key' : 'photo', 'value': rawValues.photo},
{'key' : 'agree', 'value': rawValues.agree}
];
const submission = this.props.submitPost(values, 'contribute');
發(fā)送數(shù)據(jù)的時候,表單中的 “metadata” 會附加到我們提交的數(shù)據(jù)中,和默認(rèn)的 Post 數(shù)據(jù)一起提交到 WordPress Rest API 接口。
后端處理的方法
前端提交了數(shù)據(jù)過來后,默認(rèn)的 Rest API 文章接口的后端并沒有對這個附加的 “metadata” 數(shù)據(jù)進(jìn)行處理。WordPress 為我們提供了鉤子,讓我們可以自己對這些附加數(shù)據(jù)進(jìn)行處理。我們通過下面的代碼來看一下怎么保存通過 Rest API 提交過來的附加數(shù)據(jù)到文章的自定義字段。
add_action( 'rest_api_init', function() {
// 下面一行的 ‘post’ 文章類型,也可以是其他自定義文章類型;‘metadata’ 就是我們前端提交過來的 metadata 數(shù)組
register_rest_field( 'post', 'metadata', array(
// 顯示數(shù)據(jù)時候的回調(diào),我們可以在這個函數(shù)里面,把自定義字段數(shù)據(jù)附加到 Rest API 文章接口返回的 Json 數(shù)據(jù)里
'get_callback' => function( $object ) {
return get_post_meta($object->ID);
},
// 保存數(shù)據(jù)的回調(diào),我們就是在這里獲取前端提交過來的附加數(shù)據(jù),然后逐個保存到自定義字段中的
'update_callback' => function( $meta, $post ) {
$postId = $post->ID;
foreach ($meta as $data) {
update_post_meta($postId, $data['key'], $data['value']);
}
return true;
},
));
});
通過上面的代碼,我們就可以通過 WordPress Rest API 獲取和保存文章類型的自定義字段了,有了這個功能,WordPress 的靈活性才能發(fā)揮出來。需要提醒的是,上面的代碼并不會在 WordPress 文章編輯界面創(chuàng)建自定義字段 UI 表單,如果需要,我們可以通過 Metabox API 或者一些插件另外創(chuàng)建。


