J'utilise la classe Wp_query pour interroger mes publications. 15 publications sont dans un modèle récupéré lors du chargement de la page et leur filtrage fonctionne correctement. Le défilement infini recherche d'autres publications à l'aide de services de restauration JSON . Le filtre côté serveur fonctionne bien, mais je ne sais pas comment transférer la logique du serveur vers une requête appropriée.
Tableau Meta_query transmis à Wp_query sur le serveur:
meta_query
0 => array (size=3)
'key' => string 'homepage' (length=8)
'value' => string 'false' (length=5)
'compare' => string 'NOT EXISTS' (length=10)
1 => array (size=2)
'key' => string '_newsml_id' (length=10)
'compare' => string 'NOT EXISTS' (length=10)
'relation' => string 'AND' (length=3)
Comment traduire cela dans la requête? quelque chose comme:
/ wp-json/posts? filter [meta_query] [key] = page d'accueil, _newsml_id & [meta_query] [compare] = NOTEXISTS
ou
/ wp-json/posts? filter [meta_query] [key] = page d'accueil & filter [meta_query] [key] = _ newsml_id & [meta_query] [compare] = NOTEXISTS
Désolé de répondre à ma propre question, mais cela pourrait également aider d’autres développeurs.
J'ai créé ce filtre supplémentaire 'json_query_var-meta_query' qui renvoie les arguments nécessaires.
function adjustQrry($data){
$args = array();
$args['relation'] = 'AND';
foreach ($data as $key=>$value) {
if ( 'relation' === $key ) {
$args['relation'] = $data['relation'];
}
if ( substr($key, 0, 3) === 'key' ) {
$arg_num = substr($key, 3);
$args[(int)$arg_num]['key'] = $value;
}
if ( substr($key, 0, 7) === 'compare' ) {
$arg_num_comp = substr($key, 7);
$args[(int)$arg_num_comp]['compare'] = $value;
}
}
return $args;
}
add_filter('json_query_var-meta_query', 'adjustQrry', 10, 1);
Maintenant, je peux appeler JSON comme reposant pour imiter le filtre de publications Wp_query déjà sur le serveur:
?filter[meta_query][key]=_newsml_categories_newsstream&filter[meta_query][key2]=homepage&filter[meta_query][relation]=AND&filter[meta_query][compare]=NOT%20EXISTS&filter[meta_query][compare2]=NOT%20EXISTS
qu'en est-il de WP REST API V2? Je pense que cela ne fonctionne pas sur v2!
add_filter('json_query_var-meta_query', 'adjustQrry', 10, 1);
devrait-il en être ainsi?
add_filter('rest_query_vars-meta_query', 'adjustQrry', 10, 1);