WordPress Rest API 提交表单数据并保存为 Post Meta 自定义字段

文 / @WordPress主题

使用WordPress Rest API发布文章中的自定义字段

如果想要通过WordPress Rest API发布文章的话,首先需要进行用户认证。如果我们要发布默认文章,那么这会是一个很简单的过程。但是,如果需要提交自定义字段,情况就会变得复杂起来。这是因为默认的WordPress Rest API中只支持wp_posts数据表的默认字段。如果需要提交自定义字段并将其附加到正在提交的文章中,就需要进行更多的工作。

下面的表单展示了一个例子,“Titleofyourstory”和“Submission”分别是文章的标题和正文内容,而其他字段则是自定义字段。

通过wordpressrestfulapi提交表单数据

前端提交的数据格式

上面的表单是通过React开发的,但是不管是使用jQuery、PHP、Python还是其他语言,处理方法都基本相同。首先,我们需要获取需要发送到Rest API接口的数据,其中“values”就是我们要发送的数据,“title”和“content”是默认的文章数据,“metadata”是我们添加的自定义字段对象数组。“submitPost”是封装好的提交数据到Rest API的方法。

//需要发布文章时的数据
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');

在发送数据的时候,“metadata”字段会被附加到我们提交的数据中,并和默认的Post数据一起提交到WordPress Rest API接口。

后端处理的方法

前端发送了数据之后,WordPress Rest API的默认文章接口并没有对这个附加的“metadata”进行处理。但是WordPress为我们提供了钩子,让我们可以自己对这些附加数据进行处理。下面的代码展示了怎样将通过Rest API提交的自定义字段保存到文章的自定义字段中。

add_action('rest_api_init', function () {
	//‘post’是文章类型,可以更改为其他类型;‘metadata’是我们前端提交过来的metadata数组
	register_rest_field('post', 'metadata', array(
		//当显示数据时,我们可以在这个函数里将自定义字段数据附加到WordPress Rest API文章接口返回的Json数据里
		'get_callback' => function ($object) {
			return get_post_meta($object->ID);
		},
		//保存数据时,我们需要从前端提交的附加数据中获取我们想要添加的数据,逐个添加到自定义字段中
		'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的灵活性所在。尽管需要注意的是,上面的代码并不能在WordPress文章编辑界面创建自定义字段UI表单。如果需要,我们可以通过Metabox API或者一些插件另外创建。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。