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.
$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.
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.
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 );
}