Cómo obtener un meta personalizado de publicación usando la API REST

8

Estoy tratando de crear una API REST para mi sitio web de wordpress que se usa para la lista de instalaciones mediante el complemento administrador de trabajo de wordpress.

He registrado mi publicación personalizada, taxonomías en \ plugins \ rest-api \ plugin.php.

debajo de la API me da todos los listados con respuesta predeterminada.

enlace

Quería agregar meta de publicación en la respuesta JSON usando el siguiente código.

function slug_register_phone_number() {
            register_rest_field( 'job_listing',
                'phone',
            array(
                'get_callback' => 'slug_get_phone_number',
                'update_callback' => null,
                'schema' => null,
            )
        );
    }

    function slug_get_phone_number($post, $field_name, $request) {
        return get_post_meta($post->id, '_phone' );
    }
}

Al usar el código anterior, puedo agregar "teléfono" como respuesta REST, pero siempre recibo phone = false en respuesta. No muestra los datos correctos de la tabla wp_postmeta.

He seguido a continuación los enlaces mencionados para referencia.

enlace

Enchufe los detalles. 1. WP Job Manager 2. resto-api

Cualquier ayuda será realmente útil.

    
pregunta Hari Soni 23.05.2016 - 04:58

3 respuestas

5

$post en la función de devolución de llamada es una matriz, no un objeto. Entonces no puedes usar $post->id . Cámbielo a $post['id'] y debería funcionar:

function slug_get_phone_number($post, $field_name, $request)
{
    return get_post_meta($post['id'], '_phone', true);
}

Recomiendo cambiar _phone a phone_number o alguna otra cosa sin subrayar el prefijo. Porque _ se usa a menudo con claves de metadatos privadas. Intenta agregar un campo personalizado que tenga una clave de metadatos con el prefijo _ directamente en tu publicación, verás lo que quise decir.

    
respondido por el MinhTri 23.05.2016 - 08:23
12

WP API tiene un filtro rest_prepare_post (o rest_prepare_CPT si está trabajando con publicaciones personalizadas) que puede usar para modificar la respuesta JSON. En su caso, será rest_prepare_joblisting .

function filter_joblisting_json( $data, $post, $context ) {
$phone = get_post_meta( $post->ID, '_phone', true );

if( $phone ) {
    $data->data['phone'] = $phone;
}

return $data;
}
add_filter( 'rest_prepare_joblisting', 'filter_joblisting_json', 10, 3 );

Usando el mismo filtro, también puede eliminar campos / datos de la respuesta y realizar cualquier manipulación de los datos. Aquí puede encontrar algunos ejemplos de uso del filtro que pueden ser útiles y llegar a saber cómo funciona.

    
respondido por el Boris Kuzmanov 23.05.2016 - 08:59
1

Simplemente agrega estos métodos a function.php

add_action( 'rest_api_init', 'create_api_posts_meta_field' );

function create_api_posts_meta_field() {

 // register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
 register_rest_field( 'tour', 'metaval', array(
 'get_callback' => 'get_post_meta_for_api',
 'schema' => null,
 )
 );
}

function get_post_meta_for_api( $object ) {
 //get the id of the post object array
 $post_id = $object['id'];

 //return the post meta
 return get_post_meta( $post_id );
}
    
respondido por el Nuwan 14.11.2017 - 09:43

Lea otras preguntas en las etiquetas