J'utilise WP_Query pour le visiteur pour filtrer les publications. Les articles concernent les produits. Donc, dans le filtre, il y a un champ où l'utilisateur peut sélectionner Prix maximum et Prix minimum. (Tout comme la plupart des sites commerciaux).
OK, c’est le formulaire de filtrage que j’utilise pour collecter les entrées de l’utilisateur:
<lable>Min. Price ($)</lable>
<select name="minprice">
<option value="0">0</option>
<option value="100">100</option>
<option value="200">200</option>
<option value="300">300</option>
.....
</select>
<lable>Max. Price ($)</lable>
<select name="maxprice">
<option value="100">100</option>
<option value="200">200</option>
<option value="300">300</option>
<option value="400">400</option>
.......
</select>
Et voici la fonction qui gère les entrées:
function filter_search() {
$max = $GET_['maxprice'];
$min = $GET_['minprice'];
$args = array(
'post_type' => 'product',
'meta_query' => array(
array(
'key' => 'price',
'value' => array( $min, $max ), //this is the line where i cant figure out how.
'compare' => 'BETWEEN'
)
)
);
$searched_posts = new WP_Query( $args);
return $searched_posts;
}
Ai-je raison d'utiliser le tableau pour la valeur que je souhaite comparer?
Cela semble correct, j'ai un code très similaire qui fonctionne comme prévu:
function price_query_test() {
update_post_meta( 7, '_price', 10 );
update_post_meta( 12, '_price', 20 );
update_post_meta( 18, '_price', 30 );
update_post_meta( 72, '_price', 40 );
$test = new WP_Query( array(
'post_type' => 'page',
'meta_query' => array( array(
'key' => '_price',
'value' => array( '10', '25' ),
'compare' => 'BETWEEN',
) ),
'fields' => 'ids',
) );
printf( '<pre>%s</pre>', print_r( $test->posts, 1 ) );
die();
}
add_action( 'init', 'price_query_test' );
Ce qui précède me donne un tableau:
Array
(
[0] => 12
[1] => 7
)
Si nous le voulions, nous pourrions aussi ajouter dans notre meta_query
un type:
'meta_query' => array( array(
'key' => '_price',
'value' => array( '10', '25' ),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
) )
Mais cela semble fonctionner comme prévu sans le meta_type
.
Si vous utilisez WooCommerce, notez que leur métavaleur est _price
et et non price
.