web-dev-qa-db-fra.com

Comment obtenir un post méta personnalisé en utilisant REST API

J'essaie de créer une API REST pour mon site Web wordpress, utilisée pour la liste des installations à l'aide du plugin wordpress job manager.

J'ai enregistré mon article personnalisé, les taxonomies dans\plugins\rest-api\plugin.php.

ci-dessous API me donne toutes les annonces avec réponse par défaut.

http: // localhost/sports/wp-json/wp/v2/joblisting/

Je voulais ajouter post meta dans la réponse JSON en utilisant le code ci-dessous.

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

En utilisant le code ci-dessus, je peux ajouter "téléphone" comme réponse REST, mais je reçois toujours phone = false en réponse. Il ne montre pas les données correctes de la table wp_postmeta.

J'ai suivi les liens mentionnés ci-dessous pour référence.

http://v2.wp-api.org/extending/modifying/

Branchez les détails. 1. WP gestionnaire de travaux 2. rest-api

Toute aide sera vraiment utile.

9
Hari Soni

$post dans la fonction de rappel est un tableau et non un objet. Donc, vous ne pouvez pas utiliser $post->id. Changez-le en $post['id'] et cela devrait fonctionner:

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

Je recommande de changer _phone en phone_number ou quelque chose d'autre sans préfixe de soulignement. Parce que _ est souvent utilisé avec des clés méta privées. Essayez d'ajouter un champ personnalisé qui a une clé méta avec le préfixe _ directement à votre message, vous verrez ce que je voulais dire.

5
MinhTri

L'API WP a un filtre rest_prepare_post (ou rest_prepare_CPT si vous travaillez avec des publications personnalisées) que vous pouvez utiliser pour modifier la réponse JSON. Dans votre cas, ce sera 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 );

En utilisant le même filtre, vous pouvez également supprimer des champs/des données de la réponse et effectuer toute manipulation des données. Ici vous pouvez trouver quelques exemples d'utilisation du filtre qui pourraient vous être utiles et comment en savoir plus sur son fonctionnement.

16
Boris Kuzmanov

Ajoutez simplement ces méthodes à 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 );
}
1
Nuwan