Marinus Klasen

Marinus Klasen

  • Development
  • Consultancy
  • Developer Resources
  • Blog
  • Contact

July 24, 2022

Updating custom post meta via the WordPress REST API

Marinus Klasen

When working with the WordPress REST API we sometimes have to update custom post meta for a (custom post type) post. In my case, I am using the available REST endpoints but I did want to add some extra data to the GET request, and wanted to make it possible to update that data as well.

It’s actually quite easy to get this to work in WordPress, we’ll hook into the rest_api_init and use the register_rest_field function to add this features, like in the example below:

add_action( 'rest_api_init', array( $this, 'add_fields' ) );
public function add_fields() {
	register_rest_field(
		'session',
		'start_time',
		array(
			'get_callback' => function() {
				return get_post_meta( get_the_ID(), '_sympose_session_start', true );
			},
			'update_callback' => function( $value, $object, $field_name ) {
				return update_post_meta($object->ID, '_sympose_session_start', $value );
			},
		)
	);
}

In the example above we’re extending the session post type with a “start_time” field. The “start_time” field is saved as post meta with the _sympose_session_start key. Change these variables to your own and you’re good to go!

We can then use something like a fetch request to get and update these fields like in the example below:

let post_id = 10;
let start_time_value = '10:00';

fetch(wpApiSettings.root + "wp/v2/session/" + post_id, {
	method: "POST",
	headers: {
		"X-WP-Nonce": wpApiSettings.nonce,
		'Content-Type': 'application/json',
	},
	body: JSON.stringify({
		start_time: start_time_value,
	}),
})
.then(res => res.json())
.then(result => {
	console.log(result);
});

Note: Consider these examples as starting points. In my case, they’re used for a PoC and security has not been considered in yet as that also makes the code more difficult to understand.

Happy developing!

About Marinus Klasen

Marinus has been working in software/web development for more than a decade. Since 2020 his attention shifted on sharing knowledge and developing products and tools for sharing knowledge.

Marinus Klasen on Twitter

This site runs on Cloudways.
It's fast isn't it?
Cloudways offers high-quality, fast and affordable hosting.

Learn more

Need a hand? Post your project and hire me and other top notch developers on Codeable.

Hire me on Codeable

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Ready to take action?

I'm looking forward to discuss your projects and goals!
Feel free to reach out using the contact details below.

Marinus Klasen

[email protected]
twitter.com/marinusklasen
linkedin.com/in/marinusklasen

  • GitHub
  • LinkedIn
  • Twitter

Have you read?

  • Storing private data with SSH on WPEngine sitesDecember 15, 2022
  • Get the HTML content of a block edit page or post in WordPressNovember 30, 2022
  • Rename Coupon code text to Discount code in WoocommerceNovember 3, 2022
  • Background-size cover in mPDFOctober 22, 2022
  • WordPress.com SSH & duplicating a WordPress.com website locallyOctober 11, 2022

Copyright © 2023 · Marinus Klasen | Webdesign by Team Rood