Jeśli mam pętlę uruchomioną z zapytania kategorii, takiego jak:
<?php $the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');?>
<ul>
<?php while ($the_query->have_posts()) : $the_query->the_post();?>
<li>.. </li><?php wp_reset_query(); ?>
<?php endwhile; ?>
</ul>
Jak utworzę klauzulę if, która łamie listę w określonym przedziale czasowym i uruchamia nową. Na przykład na 10. postu zwróć a </ul>
i rozpocznij nowy <ul>
o 11.
Jest to nieprawidłowe, ale dla zilustrowania mojego celu:
<?php $count =0;
while($count <=50){
if ($count == 9){
echo "<li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li></ul>";
}
elseif ($count == 10){
echo "<ul><li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li>";
}
else {
echo "<li><a href='<?php the_permalink(); ?>'><?php the_title(); ?></a></li>";
}
Jaki jest prawidłowy sposób włączenia tej logiki do pętli?
Odpowiedzi:
Utwórz kolumny dla swojego zapytania i łatwego wyświetlania
W motywach prawdopodobnie bardziej przydatne jest posiadanie czegoś, co dobrze pasuje do tagów szablonów i pętli. Moja pierwsza odpowiedź nie koncentrowała się tak bardzo. Dodatkowo pomyślałem, że jest to zbyt skomplikowane, aby można je było szybko adoptować.
Łatwiejszym podejściem, które przyszło mi do głowy, było rozszerzenie „pętli” o kolumny i do tej pory doszło do tego rozwiązania:
Obiekt WP_Query_Columns „rozszerza” każde standardowe zapytanie WP za pomocą kolumn, które można łatwo iterować. Pierwszy parametr to zmienna zapytania, a drugi parametr to liczba elementów do wyświetlenia w kolumnie:
Aby go użyć, po prostu dodaj klasę WP_Query_Columns z tej listy do swojego motywu function.php.
Zaawansowane użycie
Jeśli potrzebujesz numeru kolumny, który aktualnie wyświetlasz (np. W przypadku niektórych parzystych / nieparzystych klas CSS, możesz go również uzyskać z foreach:
Dostępna jest także całkowita liczba kolumn:
Dwadzieścia dziesięć przykładów
Mogę szybko zhakować dwadzieścia dziesięć motywów na test i w ten sposób dodać nagłówki ponad dowolną pętlę. Jest wstawiony do loop.php, początkiem jest kod motywu:
Aby uzyskać dłuższą odpowiedź:
(tak po prostu doszedłem do powyższych rzeczy, ale lepiej wyjaśnia, jak rozwiązać problem za pomocą prostych operacji matematycznych. Moim nowym rozwiązaniem jest iteracja czegoś wstępnie obliczonego).
To trochę zależy od tego, ile naprawdę potrzebujesz, aby rozwiązać problem.
Na przykład, jeśli liczba elementów w kolumnie jest równa jeden, jest to bardzo proste:
Nawet przy tym prostym kodzie widać, że należy podjąć wiele decyzji:
Ostatnie pytanie jest dość interesujące dla danych wyjściowych HTML, ponieważ prawdopodobnie chcesz zawrzeć nie tylko elementy, ale także kolumnę z elementami HTML.
Na szczęście dzięki kodowi możemy ustawić wszystkie te zmienne i stworzyć kod, który zawsze będzie obliczał nasze potrzeby.
A czasem nawet nie jesteśmy w stanie odpowiedzieć na każde pytanie od samego początku. Na przykład, liczba wszystkich elementów: czy istnieje jakaś, kilka, wiele dokładnych liczb, które pasują do całkowitej liczby kolumn w sumie?
Nawet odpowiedź Jana Fabry'ego może działać w niektórych przypadkach (tak jak mój przykład powyżej dla scenariusza z jedną pozycją na kolumnę), możesz być zainteresowany czymś, co działa na dowolną liczbę elementów zwróconych przez WP_Query.
Najpierw matematyka:
Ten kod nie działa, więc postawmy to w prostym przykładzie tekstowym
To faktycznie działa i wykonuje już pewne dane wyjściowe:
Symuluje to już całkiem dobrze, jak mogłoby to wyglądać w szablonie wordpress:
(Nie wykonałem ostatniego przykładu w środowisku WP, ale powinien on być co najmniej poprawny pod względem składniowym).
źródło
Jest to bardziej ogólne pytanie dotyczące programowania, ale oto podstawowa idea:
źródło
wp_reset_query();
nie jest powiązany ze zmienną $ the_query. To wcale nie jest potrzebne, prawda?$the_query->the_post()
nadpisze$post
zmienną globalną iwp_reset_query()
przywraca ją (wywołującwp_reset_postdata()
- co samo może być wystarczające?).$wp_query
ale$the_query
zostało użyte w tym przykładzie. Jednak się myliłem, dodam to do mojej drugiej odpowiedzi w celu uzupełnienia.<ul></ul>
.Nie ma potrzeby tworzenia oddzielnej var do liczenia, ponieważ var query już liczy się go pod adresem:
$wp_query->current_post
. Ponadto należy uwzględnić ostatni wpis na liście, aby nie było pustych<ul></ul>
znaczników.źródło
WP_Query
ma również$post_count
zmienną, której możesz użyć zamiastcount($the_query->posts)
. Zac, możesz „nie zaakceptować” mojej odpowiedzi i zaakceptować inną, jeśli to lepiej rozwiąże twój problem.Dodaj
get_columns_array()
funkcję do swojego function.php. Następnie możesz łatwo iterować po kolumnach:W swoim motywie przewidujesz następnie pętlę nad kolumnami:
Ustawiam domyślny rozmiar kolumny na 10. Możesz użyć drugiego parametru, aby ustawić rozmiar kolumny na własną rękę. Lubią 7:
get_columns_array($post_count, 7);
.źródło
Oto inne podejście, które możesz zastosować:
źródło