J'essaie d'utiliser wp_query (ou une autre classe de requête native Wordpress) pour effectuer les opérations suivantes:
obtenir tous les messages WHERE (post_type = 'post' ET catégorie = 7) OR (post_type = 'études de cas' ET meta_key = 'homeslide' ET meta_value = 1)
Je ne suis pas sûr qu'aucun d'entre eux puisse encore gérer cela.
Essayer avec WP Requête:
$args = array (
'relation' => 'OR',
array(
'meta_key' => '_homeslide',
'meta_value' => '1'
),
array(
'category' => '7'
)
);
Mais je pense que "relation" ne doit être utilisé qu'avec tax_query.
Je pourrais probablement utiliser $ wpdb pour créer une requête avancée, mais je voulais voir si cela pouvait être fait avec les autres et voir s'il me manquait quelque chose d'évident.
Ok, j'ai mis au point une solution en utilisant get_posts & query_posts pour renvoyer les tableaux pour chacun: posts et études de cas. Puis array_merged (merci pour le heads up EAMann), puis utilisez uasort () avec une fonction de comparaison personnalisée pour les trier par post_date.
Ce n'est pas la solution la plus attrayante, mais comme cela fonctionne et que je ne renvoie qu'un maximum de 5 messages au total pour chaque requête, nous le ferons.
// Collect posts
$news = get_posts();
$cs = query_posts( array(
'post_type' => 'case-studies',
'meta_key' => '_homeslide',
'meta_value' => 'true'
));
// Merge the two arrays
$vslides = array_merge($news, $cs);
// Function to compare array elements using post_date
function compare($x, $y) {
if ( strtotime($x->post_date) == strtotime($y->post_date) )
return 0;
else if ( strtotime($x->post_date) > strtotime($y->post_date) )
return -1;
else
return 1;
}
// Sort by post_date
uasort($vslides, 'compare');
Pour ce type de requête complexe, je vous recommande d'exécuter deux requêtes, puis de fusionner les résultats.
D'abord, obtenez un tableau pour:
obtenir tous les messages WHERE (post_type = 'post' AND category = 7)
Ensuite, obtenez un tableau pour:
(post_type = 'études de cas' AND meta_key = 'homeslide' ET meta_value = 1)
Utilisez ensuite array_merge()
pour combiner les tableaux et vous obtiendrez une collection répondant à vos besoins. Oui, vous faites des requêtes ... mais cela semble être une solution à court terme assez rapide/facile.