2012-09-07 24 views
5

UPDATE: Próbowałem, używając następującego kodu:zamawiania posty Wordpress na podstawie kategorii nadrzędnej

<?php if (is_category(events)) { 
$posts = query_posts($query_string . '&orderby=event_date&order=desc'); 
} else { 
    $posts = query_posts($query_string . '&orderby=title&order=asc'); 
    } 
?> 

Czy jest jakiś powód, że nie działała? Wygląda na to, że porządkuje się porządkowanie postów w porządku alfabetycznym, ale wciąż nie ma szczęścia w porządku dat w ramach "wydarzeń".

-

Po przeszukiwaniu różnych istniejących pytań nie mogę całkiem znaleźć rozwiązanie, co próbuję zrobić.

Obecnie wszystkie posty na mojej stronie są sortowane alfabetycznie, co jest dopuszczalne z wyjątkiem jednej nowej kategorii, którą dodałem. W tej kategorii chcę zamówić wszystkie posty według wartości, którą wpisuję w polu niestandardowym. To pole nazywa się "data_wykonania" - dlatego chcę zasadniczo zamówić posty według daty, ale nie datę utworzenia posta, datę, w której użytkownik ręcznie wprowadził to pole.

udało mi się go uruchomić za pomocą:

<?php if (is_category($events)) { $posts = query_posts($query_string . '&orderby=$event_date&order=asc'); } ?> 

Jednak ta nadpisuje aphabetical zamówienie na wszystkich innych stronach.

Dla porządku alfabetycznym Używam:

<?php if (is_category()) { $posts = query_posts($query_string . '&orderby=title&order=asc'); } ?> 

Zasadniczo chcę oświadczenie, które mówi stronę zamówić wszystkie posty w aphabetical kolejności, chyba że kategoria jest „wydarzenia”, gdzie chcę zamówić je przez niestandardowa data wydarzenia.

Jak możesz prawdopodobnie powiedzieć, że jestem bardzo z przodu, nie z tyłu, więc wiele z tego jest dla mnie całkiem nowych, więc każda pomoc lub rada jest doceniana.

Odpowiedz

0

Mam nadzieję, że zrozumiał swoje pytanie, użyj WP_Query oraz w orderby dodać odstęp pomiędzy zamówieniem przez kolumny:

$args = array(
    'posts_per_page' => 100, 
    'orderby' => 'title', 
    'order' => 'ASC', 
); 

if(is_category($events)){ 
    $args['orderby'] .= " meta_value_num"; 
    $args['meta_key'] = 'event_date'; 
} 

$posts = (array) new WP_Query($args); 
+0

Czy nie musiałbym użyć instrukcji if, aby określić kategorię zdarzeń, aby wyświetlać stronę inaczej niż w innych kategoriach? –

+0

Tak, tak. Aktualizuję odpowiedź –

+0

Bardzo doceniam twoją pomoc z tym, wciąż nie mam szczęścia przy użyciu WP-Query. Czy są jakieś powody, dla których poniższe czynności będą działać poprawnie? Wyświetla wszystkie kategorie w kolejności alfabetycznej, ale nie w kolejności w kolejności dat?

0

Co o:

<?php $posts = query_posts($query_string . (is_category($events)?'&orderby='.$event_date:'&orderby=title') . '&order=asc'); ?> 
+0

Próbowałem użyć tego, ale nie wyświetlałem tak, jak powinno. Doceń odpowiedź. –

0
<?php 
$recent = new WP_Query(“cat=ID&showposts=x”); 
while($recent->have_posts()) : $recent->the_post(); 
?> 
1

Aby zamówić posty niestandardową wartość pola, musisz dodać niestandardowe pole meta do samego zapytania. orderby=meta_value oprócz meta_key=metafieldid pozwoli na zamawianie w ten sposób.

Chciałbym użyć pre_get_posts hook i zmodyfikować obiekt zapytania, jeśli get_query_var("cat") (lub podobne zapytanie var) zwraca żądaną kategorię postów.

add_action("pre_get_posts", "custom_event_post_order"); 

function custom_event_post_order($query) 
{ 
    $queried_category = $query -> get_query_var("cat"); 

    /* 
    * If the query in question is the template's main query and 
    * the category ID matches. You can remove the "is_main_query()" 
    * check if you need to have every single query overridden on 
    * a page (e.g. secondary queries, internal queries, etc.). 
    */ 
    if ($query -> is_main_query() && $queried_category == 123) 
    { 
     $query -> set("meta_key", "event_date"); // Your custom field ID. 
     $query -> set("orderby", "meta_value"); // Or "meta_value_num". 
     $query -> set("order", "ASC"); // Or "DESC". 
    } 
} 

Należy pamiętać, że to podejście zastępuje wszystkie zapytania korzystające z danej kategorii. Możesz budować niestandardowe obiekty WP_Query, które używają własnych parametrów do budowania pętli.

Należy również ujednolicić sposób zapisywania niestandardowych danych pól w bazie danych. W przypadku dat wolę używać formatowanych w systemie UNIX czasów, które można łatwo przemieszczać i nimi manipulować. W ten sposób nie dochodzi do wypadków podczas wysyłania zapytań, a niektóre dane są formatowane w inny sposób niż reszta.

Zastrzeżenie: Nie miałem czasu, aby przetestować powyższy kod w akcji, ale ogólny pomysł powinien działać poprawnie.

EDYCJA: powyższy kod należy oczywiście wstawić do functions.php lub podobnego pliku funkcji ogólnych.

+0

Bardzo dobre i czyste rozwiązanie! – Philipp

Powiązane problemy