J'essaye de filtrer par une méta-requête mais peu importe ce que j'essaie, je ne peux pas le faire fonctionner.
En gros, je veux cette requête via l'API restante:
wp-json/wp/v2/books?meta_query[relation]=OR&meta_query[0][key]=arkivera&meta_query[0][value]=1&meta_query[0][compare]==
J'ai essayé plusieurs champs personnalisés différents, mais il retournera toujours tous les objets post.
Dans mon fichier de fonctions, j'ai ajouté:
function api_allow_meta_query( $valid_vars ) {
$valid_vars = array_merge( $valid_vars, array( 'meta_query') );
return $valid_vars;
}
add_filter( 'rest_query_vars', 'api_allow_meta_query' );
J'ai essayé de terminer la documentation à ce sujet mais je n'ai pas pu, et la plupart des questions similaires ne concernent pas wordpress 4.7, car le filtre [xxx] est supprimé.
Vous pouvez écrire votre propre gestionnaire REST pour des requêtes personnalisées si vous le souhaitez. Dans votre cas, la requête peut être effectuée ainsi:
// Register a REST route
add_action( 'rest_api_init', function () {
//Path to meta query route
register_rest_route( 'tchernitchenko/v2', '/my_meta_query/', array(
'methods' => 'GET',
'callback' => 'custom_meta_query'
) );
});
// Do the actual query and return the data
function custom_meta_query(){
if(isset($_GET['meta_query'])) {
$query = $_GET['meta_query'];
// Set the arguments based on our get parameters
$args = array (
'relation' => $query[0]['relation'],
array(
'key' => $query[0]['key'],
'value' => $query[0]['value'],
'compare' => '=',
),
);
// Run a custom query
$meta_query = new WP_Query($args);
if($meta_query->have_posts()) {
//Define and empty array
$data = array();
// Store each post's title in the array
while($meta_query->have_posts()) {
$meta_query->the_post();
$data[] = get_the_title();
}
// Return the data
return $data;
} else {
// If there is no post
return 'No post to show';
}
}
}
Il ne vous reste plus qu'à accéder à:
wp-json/tchernitchenko/v2/my_meta_query?meta_query[relation]=OR&meta_query[0][key]=arkivera&meta_query[0][value]=1&meta_query[0][compare]==
Le code suivant devrait ajouter plusieurs fonctionnalités de méta-requêtes à tous vos types de publication. Il prend en charge CPT (type de message personnalisé) et ACF (champ personnalisé avancé). Le code source est également disponible sur Github .
Ajoutez-le à votre function.php
add_action( 'rest_api_init', 'wp_rest_filter_add_filters' );
/**
* Add the necessary filter to each post type
**/
function wp_rest_filter_add_filters() {
foreach ( get_post_types( array( 'show_in_rest' => true ), 'objects' ) as $post_type ) {
add_filter( 'rest_' . $post_type->name . '_query', 'wp_rest_filter_add_filter_param', 10, 2 );
}
}
/**
* Add the filter parameter
*
* @param array $args The query arguments.
* @param WP_REST_Request $request Full details about the request.
* @return array $args.
**/
function wp_rest_filter_add_filter_param( $args, $request ) {
// Bail out if no filter parameter is set.
if ( empty( $request['filter'] ) || ! is_array( $request['filter'] ) ) {
return $args;
}
$filter = $request['filter'];
if ( isset( $filter['posts_per_page'] ) && ( (int) $filter['posts_per_page'] >= 1 && (int) $filter['posts_per_page'] <= 100 ) ) {
$args['posts_per_page'] = $filter['posts_per_page'];
}
global $wp;
$vars = apply_filters( 'rest_query_vars', $wp->public_query_vars );
function allow_meta_query( $valid_vars )
{
$valid_vars = array_merge( $valid_vars, array( 'meta_query', 'meta_key', 'meta_value', 'meta_compare' ) );
return $valid_vars;
}
$vars = allow_meta_query( $vars );
foreach ( $vars as $var ) {
if ( isset( $filter[ $var ] ) ) {
$args[ $var ] = $filter[ $var ];
}
}
return $args;
}
IMHO, un meilleur moyen d'inclure la fonction supplémentaire en tant que plugin séparé. Ainsi, même lorsque l'utilisateur change de thème, vos appels d'API ne seront pas affectés.
J'ai donc développé un plugin pour méta-requête dans WordPress. Mieux encore, il prend également en charge ACF!
Après l’installation, il suffit de faire une requêteGETau format suivant.
https://domain.com/wp-json/acf/v3/customposttype?filter[meta_key]=acfkey&filter[meta_value]=acfvalue
Découvrez le code source du plugin depuis Github .
Utilisez le filtre rest_ {CUSTOM_POST_TYPE} _query pour ajouter la prise en charge des méta-publications dans WP API Reste pour tout type de publication.
Consultez le Gist recherche poste par poste méta avec rest API .
Comment utiliser?
http://example.org/wp-json/wp/v2/post?meta_key=<my_meta_key>&meta_value=<my_meta_value>
Exemple
Obtenir les messages qui post meta already-visited
valeur est true
.
http://example.org/wp-json/wp/v2/post?meta_key=already-visited&meta_value=true
Elle répertorie UNIQUEMENT les publications pour lesquelles la clé méta already-visited
a la valeur true
.
Pour référence Recherche poste par poste meta with rest api .
Filtres disponibles