Paginacja numeryczna w WordPressie
Witryny internetowe oparte o WordPressa często mają zaimplementowaną nieefektywną paginację opartą o linki do poprzedniej/następnej strony z wpisami. Takie rozwiązanie ma bardzo wiele wad, a jedną z najważniejszych jest to, że nie możemy bezpośrednio przejść do np. najstarszych artykułów. Problem ten można rozwiązać stosując paginację numeryczną, czyli po prostu wyświetlając numery poszczególnych stron z wpisami. Co ciekawe takie rozwiązanie jest również bezpośrednio wspierane przez system WordPress.
Jak więc zrobić paginację numeryczną na stronie opartej o WordPressa?
Do tego celu wykorzystamy funkcję paginate_links()
, która bezpośrednio wygeneruje nam listę stron.
Przykładowa implementacja (kod działa dla WordPressa od wersji 4.0):
global $wp_query; paginate_links( array( 'base' => @add_query_arg('paged','%#%'), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages, 'prev_text' => __('« '), 'next_text' => __(' »'), ) );
Kod ten należy wkleić w miejscu w którym chcemy wyświetlić naszą paginację. Oczywiście należy dopisać do niego instrukcję echo()
gdyż jak wcześniej wspomniałem funkcja paginate_links()
wygeneruje nam tylko listę stron.
Napiszmy więc kompletną funkcję w PHP wyświetlającą paginację dla WordPressa (kod działa od wersji 4.0):
function pagination() { global $wp_query; if ($wp_query->max_num_pages > 1) { echo '<p class="pages" role="navigation">' . paginate_links( array( 'base' => @add_query_arg('paged','%#%'), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages, 'prev_text' => __('« '), 'next_text' => __(' »'), ) ) . '</p>'; } }
Kod ten można zapisać np. w pliku function.php
naszego szablonu i użyć w dowolnym miejscu:
<?php pagination(); /*wyświetlamy paginację*/ ?>
Nasz kod daje taki efekt:
- Dla pierwszej strony:
- Dla strony ze środka:
- Dla ostatniej strony:
Więcej na temat funkcji paginate_links()
można znaleźć w dokumentacji WordPressa (wersja angielska): www.codex.wordpress.org/Function_Reference/paginate_links.