J'ai un type de poste personnalisé « Liste » et je veux obtenir toutes les annonces qui ont un champ personnalisé gateway_value != 'Yes'
et trier les résultats par un autre champ personnalisé, location_level1_value
. Je peux faire fonctionner les requêtes séparément, mais je ne peux pas les combiner:
Requête 1 (trier par emplacement):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'post_status' => 'publish',
'posts_per_page' => '9',
'meta_key' => 'location_level1_value',
'orderby' => 'location_level1_value',
'order' => 'ASC',
'paged' => $paged
)
);
Requête 2 (valeur de champ personnalisé! = Oui):
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_key' => 'gateway_value',
'meta_value' => 'Yes',
'meta_compare' => '!=',
'paged' => $paged
)
);
Requête combinée:
J'ai regardé le codex pour obtenir de l'aide, mais la requête suivante ne fonctionne pas:
$wp_query = new WP_Query( array (
'post_type' => 'listing',
'posts_per_page' => '9',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'gateway_value',
'value' => 'Yes',
'compare' => '!='
),
array(
'key' => 'location_level1_value'
)
),
'orderby' => "location_level1_value",
'order' => 'ASC',
'paged' => $paged
)
);
Que fais-je de mal avec la requête combinée?
[MISE À JOUR]: Maintenant que la version 3.1 a été publiée, la requête combinée ci-dessus ne fonctionne toujours pas. J'obtiens des résultats, mais pas correctement triés.
[MISE À JOUR]: var_dump($wp_query->request)
donne ce qui suit:
string(527) " SELECT SQL_CALC_FOUND_ROWS wp_7v1oev_posts.* FROM wp_7v1oev_posts
INNER JOIN wp_7v1oev_postmeta ON (wp_7v1oev_posts.ID = wp_7v1oev_postmeta.post_id)
INNER JOIN wp_7v1oev_postmeta AS mt1 ON (wp_7v1oev_posts.ID = mt1.post_id) WHERE 1=1 AND wp_7v1oev_posts.post_type = 'listing' AND (wp_7v1oev_posts.post_status = 'publish') AND wp_7v1oev_postmeta.meta_key = 'gateway_value' AND CAST(wp_7v1oev_postmeta.meta_value AS CHAR) != 'Yes' AND mt1.meta_key = 'location_level1_value' ORDER BY wp_7v1oev_posts.post_date DESC LIMIT 0, 9"
la source
meta_query
paramètre est nouveau en 3.1, et devrait être publié très bientôt, mais la version stable actuelle est toujours 3.0.5, sans ce paramètre.Réponses:
Vous pouvez utiliser la requête pour filtrer le contenu comme vous le souhaitez en utilisant la 'meta_query' avec des options de filtrage, et pour la partie commande, ajoutez / modifiez simplement les paramètres suivants:
'order' => 'ASC'
la source
Tout comme Jan l'a dit dans le nouveau WordPress 3.1, vous pouvez utiliser,
meta_query
mais jusqu'à ce que cela sorte, vous pouvez utiliser votre première requête pour commander et filtrer à l'intérieur de votre boucle comme suit:et ajoutez ce code à vos fonctions.php
maintenant cela devrait fonctionner.
la source
gateway_value == "Yes"
auraient été sans condition ... Une idée sur la façon de résoudre ce problème?Toutes mes excuses pour avoir répondu à ma propre question:
Il semble que ce problème soit connu en consultant [http://core.trac.wordpress.org/ticket/15031[-021]. Je l'ai corrigé (piraté?) Pour qu'il fonctionne en utilisant
post_filter
, comme ça (juste pour la référence de quelqu'un qui pourrait chercher la même réponse):Dans functions.php ###
Wp_query modifié dans le fichier modèle ###
la source