Como obter meta post personalizada usando a API REST

8

Estou tentando criar APIs REST para o meu site wordpress, que é usado para listar as instalações usando o plug-in do gerenciador de tarefas do wordpress.

Eu registrei minha postagem personalizada, taxonomias em \ plugins \ rest-api \ plugin.php.

abaixo da API me fornece todas as listagens com resposta padrão.

enlace

Eu queria adicionar post meta na resposta JSON usando o código abaixo.

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' );
    }
}

Usando o código acima, posso adicionar "telefone" como uma resposta REST, mas estou sempre recebendo phone = false em resposta. Não está mostrando os dados corretos da tabela wp_postmeta.

Eu segui os links abaixo mencionados para referência.

enlace

Conecte detalhes. 1. gerente de trabalho WP 2. rest-api

Qualquer ajuda será realmente útil.

    
por Hari Soni 23.05.2016 / 04:58

3 respostas

5

$post na função de retorno de chamada é uma matriz, não um objeto. Então você não pode usar $post->id . Mude para $post['id'] e isso deve funcionar:

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

Eu recomendo alterar _phone para phone_number ou qualquer outra coisa sem o prefixo de sublinhado. Porque _ é frequentemente usado com chaves meta privadas. Tente adicionar um campo personalizado que tenha uma meta-chave com o prefixo _ diretamente em sua postagem. Você verá o que eu quis dizer.

    
por MinhTri 23.05.2016 / 08:23
12

A API do WP tem um filtro rest_prepare_post (ou rest_prepare_CPT , se você estiver trabalhando com postagens personalizadas), que pode ser usado para modificar a resposta do JSON. No seu 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 o mesmo filtro, você também pode remover campos / dados da resposta e fazer qualquer manipulação dos dados. Aqui você pode encontrar alguns exemplos de como usar o filtro que pode ser útil e obter sabe como funciona.

    
por Boris Kuzmanov 23.05.2016 / 08:59
1

Apenas adicione este método para 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 );
}
    
por Nuwan 14.11.2017 / 09:43