Vous avez un champ personnalisé appelé startDate
mais ce n'est que sur quelques événements. Je me demandais s'il n'était pas défini pour un article que je pourrais utiliser post_date
pour générer la liste des articles?
// if meta_key _postmeta.startDate isn't set get the rest by posts.post_date
query_posts(
array(
array(
'posts_per_page' => 10,
'meta_key' => 'startDate',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<',
'orderby' => 'meta_value',
'order' => 'ASC'
),
array(
'meta_key' => 'post_date',
'meta_value' => date('Y-m-d'),
'meta_compare' => '<'
)
)
);
Réponses:
Si vous pouvez l'expliquer en SQL, vous pouvez l'interroger! Il y a trois endroits où nous voulons changer la requête par défaut:
La jointure et la clause where sont ajoutées via la
_get_meta_sql()
fonction . La sortie est filtrée, nous pouvons donc y accéder:La clause de commande est filtrée à travers
posts_orderby
:Cela nous donne la requête SQL suivante:
N'oubliez pas de décrocher les filtres après avoir effectué votre requête, sinon vous gâcheriez d'autres requêtes également. Et si possible, vous ne devez pas
query_posts()
vous appeler , mais modifier la requête de publication principale effectuée par WordPress lors de la configuration de la page.la source
functions.php
fichier de votre thème . Ensuite, juste avant d'exécuter la requête, vous placez les deuxadd_filter()
lignes. Après la requête, vous écrivezremove_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' ); remove_filter( 'posts_orderby', 'wpse12814_posts_orderby' );
pour les supprimer à nouveau.essayez quelque chose comme:
la source
Un appel de messages de requête ne fait qu'une seule requête, pas deux. Donc non, vous ne pouvez pas lui demander de faire deux requêtes distinctes, puis de concaténer les résultats.
N'oubliez pas que vous sélectionnez un ensemble de publications ici, puis les affichez. Cet ensemble est sélectionné d'un seul coup. Si vous souhaitez obtenir deux ensembles distincts de publications, puis les fusionner, c'est quelque chose que vous devrez faire vous-même avec get_posts ou similaire.
la source