This is a lot of code, and I cannot test it, but it should be close to correct.
First, add these functions to your functions.php:
<?php function mam_posts_fields ($fields) {
global $mam_global_fields;
if ($mam_global_fields) $fields .= $mam_global_fields;
return $fields;
}
function mam_posts_join ($join) {
global $mam_global_join;
if ($mam_global_join) $join .= $mam_global_join;
return $join;
}
function mam_posts_where ($where) {
global $mam_global_where;
if ($mam_global_where) $where .= $mam_global_where;
return $where;
}
function mam_posts_orderby ($orderby) {
global $mam_global_orderby;
if ($mam_global_orderby) $orderby = $mam_global_orderby;
return $orderby;
}
add_filter('posts_fields','mam_posts_fields');
add_filter('posts_join','mam_posts_join');
add_filter('posts_where','mam_posts_where');
add_filter('posts_orderby','mam_posts_orderby');
?>
Then, for your nb, prix_mini, and prix_maxi, use code like this:
<?php
if(!empty($_REQUEST['nb'])) {
$mam_global_fields = ', nb.meta_value nb_value';
$mam_global_join = " JOIN $wpdb->postmeta nb
ON ({$wpdb->posts}.ID = nb.post_id AND nb.meta_key = 'qpieces'
AND nb.meta_value = {$_REQUEST['nb']})";
}
if(!empty($_REQUEST['prix_mini'])) {
$mam_global_fields .= ', mini.meta_value mini_value';
$mam_global_join .= " JOIN $wpdb->postmeta mini
ON ({$wpdb->posts}.ID = mini.post_id AND mini.meta_key = 'mprix'
AND mini.meta_value >= {$_REQUEST['prix_mini']})";
}
if(!empty($_REQUEST['prix_maxi'])) {
$mam_global_fields .= ', maxi.meta_value maxi_value';
$mam_global_join .= " JOIN $wpdb->postmeta maxi
ON ({$wpdb->posts}.ID = maxi.post_id AND maxi.meta_key = 'mprix'
AND maxi.meta_value <= {$_REQUEST['prix_maxi']})";
}
?>
Finally, use any other parameters you need in your query:
<?php query_posts('posts_per_page=10');