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

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

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

使用 WordPress Rest API 发布文章时,首先我们需用通过 WordPress Rest API 进行用户认证,然后我们就可以通过 Rest API 发布文章了,如果我们发布的是默认的文章,很简单,相信有点 Rest API 开发经验的朋友都可以搞定,如果需要提交 WordPress 文章之外的其他字段,事情就变得复杂了起来,因为 WordPress Rest API 中,文章接口接受的数据有限,只有 wp_posts 数据表中默认的字段,如果我们需要提交自定义字段并且附加到当前提交的文章,就要多做一些工作了。

我们来看下面的表单,其中,“Title of your story” 和 “Submission” 分别是文章的标题和正文内容,其他的字段都是自定义字段。

通过 wordpress restful api 提交表单数据

前端提交的数据格式

我们使用的是 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 接口。

后端处理的方法

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

add_action( 'rest_api_init', function() {

	// 下面一行的 ‘post’ 文章类型,也可以是其他自定义文章类型;‘metadata’ 就是我们前端提交过来的 metadata 数组
	register_rest_field( 'post', 'metadata', array(

        // 显示数据时候的回调,我们可以在这个函数里面,把自定义字段数据附加到 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 或者一些插件另外创建。

本站提供 WordPress 主题定制开发服务

本站长期承接 WordPress 主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有 8 年 WordPress 开发经验,如果你想 用 WordPress 开发网站, 请联系 QQ: 470266798,或邮箱: 4626395@gmail.com 咨询。

发表评论

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

*