Mam niestandardowe pole o nazwie, startDate
ale jest tylko na kilku zdarzeniach. Zastanawiałem się, czy nie jest ustawiony dla posta, którego mógłbym użyć post_date
do wygenerowania listy postów?
// 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' => '<'
)
)
);
Odpowiedzi:
Jeśli potrafisz wyjaśnić to w SQL, możesz zapytać o to! Istnieją trzy miejsca, w których chcemy zmienić domyślne zapytanie:
Sprzężenie i klauzula where są dodawane za pomocą
_get_meta_sql()
funkcji . Dane wyjściowe są filtrowane, dzięki czemu możemy się do niego podłączyć:Klauzula zamówienia jest filtrowana przez
posts_orderby
:To daje nam następujące zapytanie SQL:
Pamiętaj, aby odhaczyć filtry po wykonaniu zapytania, w przeciwnym razie zepsujesz również inne zapytania. I jeśli to możliwe , nie powinieneś dzwonić do
query_posts()
siebie , ale modyfikować główne zapytanie wysyłane przez WordPress podczas konfigurowania strony.źródło
functions.php
pliku motywu . Następnie tuż przed wykonaniem zapytania umieść dwaadd_filter()
wiersze. Po zapytaniu piszesz,remove_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' ); remove_filter( 'posts_orderby', 'wpse12814_posts_orderby' );
aby je ponownie usunąć.spróbuj czegoś w stylu:
źródło
Wywołanie wywołania zapytania stanowi tylko jedno zapytanie, a nie dwa. Więc nie, nie możesz mieć dwóch osobnych zapytań, a następnie konkatenować wyników.
Pamiętaj, że wybierasz tutaj zestaw wpisów, a następnie je wyświetlasz. Ten zestaw jest wybierany jednocześnie. Jeśli chcesz uzyskać dwa oddzielne zestawy postów, a następnie połączyć je, to musisz zrobić to sam z get_posts lub podobnym.
źródło