Je dois sélectionner des publications appartenant à plusieurs catégories et possédant certaines métavaleurs de publications. Je peux sélectionner plusieurs catégories avec
query_posts( array( 'category__and' => array(1,2,3) ) );
Mais il me faut aussi parmi les catégories sélectionnées, ne sélectionner que les publications qui ont une certaine méta_value dans la table wp_postmeta. Cette tâche que je peux effectuer avec une requête SQL:
SELECT DISTINCT (
p.ID
), p . *
FROM wp_posts AS p
INNER JOIN wp_postmeta AS p1 ON ( p.ID = p1.post_id )
CROSS JOIN wp_postmeta AS p3
USING ( post_id )
WHERE p3.meta_key = 'length'
AND convert( p3.meta_value, signed )
BETWEEN '".$min_length."'
AND '".$max_length."'
AND post_status = 'publish'
$subSelect
ORDER BY p.ID DESC
Je ne comprends pas comment puis-je sélectionner, par exemple, uniquement les publications de catégories 1, 2, 3 et postmeta meta_key, la longueur est BETWEEN $ min_length AND $ max_length?
Depuis la version 3.1, WP a considérablement amélioré l'interrogation des champs personnalisés. Si le code est correct, votre requête devrait ressembler à ceci:
query_posts(array(
'category__and' => array(1,2,3),
'meta_query' => array(
array(
'key' => 'length',
'value' => array($min_length, $max_length),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
),
),
));
Voir: