Paginacja wpisów w WordPress: cele, wdrażanie i wyświetlenie

Paginacja (stronicowanie) to proces podziału listy postów lub innych treści na osobne strony. Na przykład, jeśli masz 100 wpisów na blogu, możesz skonfigurować ustawienia paginacji tak, aby na każdej stronie wyświetlało się 10 wpisów. W efekcie lista wpisów zostanie podzielona na 10 stron po 10 wpisów na każdej. Odwiedzający mogą używać przycisków „Następna” lub „Poprzednia”, aby nawigować między stronami z listą wpisów. W niektórych przypadkach widoczna jest również numerowana lista stron, dzięki której można przejść bezpośrednio do konkretnej strony.

Cele

Paginacja ma kilka ważnych celów:

  • Ułatwienie nawigacji i poprawa doświadczenia użytkownika: Dzięki paginacji odwiedzający mogą łatwiej poruszać się po Twojej witrynie, co przekłada się na lepsze wrażenia z korzystania z niej.
  • Optymalizacja wydajności: Dzielenie treści na strony pozwala na szybsze wczytywanie i zmniejsza obciążenie serwera.
  • Poprawa indeksowania SEO: Google i inne wyszukiwarki lepiej radzą sobie z indeksowaniem treści podzielonych na strony.

Wdrażanie w WordPress 

1. Stwórz funkcję paginacji

if (!function_exists('custom_post_pagination')) {
    function custom_post_pagination() {
        global $wp_query;
        $big = 999999999; // Liczba mało prawdopodobna
        $pagination_links = paginate_links(array(
            'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
            'format' => '?paged=%#%',
            'current' => max(1, get_query_var('paged')),
            'total' => $wp_query->max_num_pages,
            'type' => 'array',
            'prev_text' => __('Previous', 'text-domain'), // Tekst dla przycisku "Poprzednia strona"
            'next_text' => __('Next', 'text-domain'), // Tekst dla przycisku "Następna strona"
            'show_all' => false,
            'end_size' => 10,
            'mid_size' => 10,
            'add_args' => false,
            'add_fragment' => '',
            'before_page_number' => '',
            'after_page_number' => ''
        ));

        if ($pagination_links) {
            echo '<ul class="custom_post_pagination">';
            foreach ($pagination_links as $link) {
                if (strpos($link, 'current') !== false) {
                    echo "<li class='active'>$link</li>"; // Aktywna strona
                } else {
                    echo "<li>$link</li>"; // Pozostałe strony
                }
            }
            echo '</ul>';
        }
    }
}

Przejdźmy do szczegółów:

  • Funkcja custom_post_pagination() służy do wyświetlania paginacji dla listy wpisów lub innych treści w WordPress.
  • Wykorzystuje funkcję paginate_links(), która generuje zestaw linków paginacji na podstawie określonych parametrów.
  • Parametry funkcji paginate_links():
    • base: Określa bazowy URL dla linków paginacji.
    • format: Określa format URL dla poszczególnych stron paginacji.
    • current: Numer aktualnej strony.
    • total: Całkowita liczba stron.
    • prev_text: Tekst dla przycisku “Poprzednia strona”.
    • next_text: Tekst dla przycisku “Następna strona”.
    • Pozostałe parametry kontrolują wygląd i zachowanie paginacji.
  • W pętli foreach generowane są linki paginacji. Jeśli link jest aktywny (obecna strona), dodawana jest klasa CSS active.

2. Wyświetl paginację w szablonie motywu

Umieść poniższy kod tam, gdzie chcesz, aby linki paginacji pojawiły się w szablonie motywu:

<?php custom_post_pagination(); ?>

3. Alternatywnie, użyj funkcji paginacji z nowym zapytaniem

Aby użyć funkcji custom_post_pagination z obiektem WP_Query w WordPressie, wykonaj poniższe kroki:

<?php
$custom_query = new WP_Query(array(
    'post_type' => 'post',
    'posts_per_page' => 5,
    'paged' => get_query_var('paged') ? get_query_var('paged') : 1 // Pobierz bieżący numer strony
));

if ($custom_query->have_posts()) {
    while ($custom_query->have_posts()) {
        $custom_query->the_post();
        // Wpisz tutaj treść swojego wpisu
    }

    custom_post_pagination(); // Wyświetl linki do paginacji dla niestandardowego zapytania

    wp_reset_postdata(); // Zresetuj dane wpisa
}
?>

Do implementacji paginacji można również wykorzystać ładowanie wpisów za pomocą AJAX, poprawiając płynność przeglądania i interakcję użytkownika. Zaletą jest szybsze przemieszczanie się między treściami bez konieczności przeładowywania całej strony.