Rest Api WordPress – devolver metaboxes


Una de las cosas que no suministra la Rest API de WordPress son los meta de un post, existen varias formas de hacerlo y lo suyo es devolver solo los que vayamos a usar pero aqui os dejo varias formas de devolver la infomacion en el resultado para ello vamos a modificar el resultado de lo que nos devuelve utilizando la funcion register_rest_field()

Devolver todos los campos del meta.

<?php
/**
* Ejemplo de Metabox y Rest API,  incluye todos los post meta
*
*/

add_action( 'rest_api_init', 'get_all_post_meta_for_api' );

function get_all_post_meta_for_api() {
	register_rest_field( 'post', 'post-meta-fields', array(
		'get_callback' => 'get_post_meta_for_api',
		'schema' => null,
	)
);
}

function get_post_meta_for_api( $object ) {
	//obtenemos el id del objeto
	$post_id = $object['id'];

	//devolvemos todos los post meta
	return get_post_meta( $post_id );
}

 

Ejemplo de devolver solo un meta

Si solo queremos devolver un meta tambien tenemos esta opcion que podeis ver en la documentacion oficial

Imaginar que teneis una meta que se llama “metabox_ejemplo” pues podriais incluirla en el json de la siguiente manera.

<?php

add_action( 'rest_api_init', 'slug_register_starship' );
function slug_register_starship() {
		// registramos la variable a devolver en este caso ejemplo_metabox_ejemplo
    register_rest_field( 'post',
        'metabox_ejemplo',
        array(
            'get_callback'    => 'slug_get_metabox_ejemplo',
            'update_callback' => null,
            'schema'          => null,
        )
    );
}

/**
 * Get the value of the "" field
 *
 * @param array $object Details of current post.
 * @param string $field_name Name of field.
 * @param WP_REST_Request $request Current request
 *
 * @return mixed
 */
function slug_get_metabox_ejemplo( $object, $field_name, $request ) {
    return get_post_meta( $object[ 'id' ], $field_name, true );
}

 

Documentacion oficial de como modificar la respuesta.

Modifying Responses