web-dev-qa-db-fra.com

Comment sélectionner les publications de plusieurs catégories et métavaleurs?

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?

1
phpdew

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:

1
Rarst