J'utilise Jetpack pour Wordpress pour produire une API JSON pour mon type de publication Events custom, qui fonctionne correctement:
https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100
Cependant, ce CPT inclut également un certain nombre de champs de post-méta générés par Des boîtes à méta personnalisées et des champs pour Wordpress . Ces champs incluent des choses comme:
_ecmb_supporting_bands
_ecmb_tickets_avail
_ecmb_event_agelim
Et par défaut, ces champs ne sont pas retournés par l'API JSON ... J'ai essayé d'exécuter des requêtes telles que:
https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100&meta_key='_ecmb_supporting_bands'
Ou sans guillemets autour de la clé méta: https://public-api.wordpress.com/rest/v1/sites/MYSITE/posts/?type=events&number=100&meta_key=_ecmb_supporting_bands
Malheureusement cela ne fonctionne pas. Est-ce que quelqu'un sait comment je peux retourner ces champs méta personnalisés dans ma réponse JSON?
Selon les documents de l'API JSON JetPack :
Par défaut, toutes les clés de métadonnées sont autorisées dans l'API, tant qu'elles ne sont pas protégées. Toute clé de métadonnées commençant par _ est protégée par défaut. Toutefois, les utilisateurs peuvent accéder aux clés de métadonnées protégées et les modifier à l'aide des fonctionnalités edit_post_meta (utilisées pour l'édition et l'affichage), add_post_meta et delete_post_meta, selon les besoins de chaque opération. Nous avons également ajouté un filtre rest_api_allowed_public_metadata qui vous permet d’inscrire spécifiquement en liste blanche certaines clés de métadonnées auxquelles tout utilisateur peut accéder, même si cette clé est protégée.
le filtre rest_api_allowed_public_metadata
est donc ce que vous recherchez.
Si vous vérifiez le code source du JetPack, vous trouverez cette partie:
function is_metadata_public( $key ) {
if ( empty( $key ) )
return false;
// whitelist of post types that can be accessed
if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', array() ) ) )
return true;
return false;
}
dans le fichier class.json-api-endpoints.php
.
Vous pouvez également consulter la fonction allow_bbpress_public_metadata()
here pour savoir comment implémenter ce filtre rest_api_allowed_public_metadata
.
Voici un exemple similaire pour votre cas:
/**
* Whitelist protected meta keys
*
* @param array $allowed_meta_keys
* @return array $allowed_meta_keys
*/
function custom_rest_api_allowed_public_metadata( $allowed_meta_keys )
{
// only run for REST API requests
if ( ! defined( 'REST_API_REQUEST' ) || ! REST_API_REQUEST )
return $allowed_meta_keys;
$allowed_meta_keys[] = '_ecmb_supporting_bands';
$allowed_meta_keys[] = '_ecmb_tickets_avail';
$allowed_meta_keys[] = '_ecmb_event_agelim';
return $allowed_meta_keys;
}
add_filter( 'rest_api_allowed_public_metadata', 'custom_rest_api_allowed_public_metadata' );
avec la sortie JSON similaire à celle-ci:
"metadata":[{"id":"196711","key":"_ecmb_event_agelim","value":"18"},
{"id":"196709","key":"_ecmb_supporting_bands","value":"The Rolling Stones"},
{"id":"196710","key":"_ecmb_tickets_avail","value":"5500"}]
En plus de @birgire reply, placer le code de filtre quelque part peut être délicat:
C'est pourquoi j'ai utilisé le plug-in suivant qui vous permet d'écrire vos actions et filtres personnalisés dans le panneau d'administration Wordpress sans avoir à vous soucier de le perdre. http://wordpress.org/plugins/add-actions-and-filters/ .
J'ai eu le même problème que vous et après avoir inclus le filtre, cela fonctionne maintenant comme un charme.