Considérons deux champs méta balance
et monthly_price
. Comment vous obtiendrez tous les articles qui ont balance < monthly_price
Vous envisagez de créer une méta-requête mais nos deux champs sont arbitraires ou n’ont pas de valeur spécifique.
Une méthode convenable consisterait à définir la valeur balance
sur 'mt1.meta_value'
, puis à utiliser un filtre 'posts_request'
pour supprimer les guillemets d'échappement:
$args = array(
'post_type' => 'post', // maybe not
'meta_query' => array(
array(
'key' => 'balance',
'compare' => '>=',
'value' => 'mt1.meta_value', // this will be treated as a string
'type' => 'NUMERIC'
),
// this is to force adding the needed JOIN clause
array(
'key' => 'monthly_price',
'compare' => 'EXISTS'
),
'relation' => 'AND'
)
);
$closure = function( $sql ) {
// remove single quotes around 'mt1.meta_value'
return str_replace( "'mt1.meta_value'", "mt1.meta_value", $sql );
};
add_filter( 'posts_request', $closure );
$query = new \WP_Query( $args ); // this is your query :)
remove_filter( 'posts_request', spl_object_hash( $closure ) );
Je devrais ajouter que j’ai utilisé 'mt1.meta_value'
parce que WordPress, lorsque plusieurs méta-requêtes sont dans les arguments, utilise des alias de table tels que "mt{$n}"
, où $n
est incrémenté pour chaque requête supplémentaire.