Paginering toevoegen aan WordPress archive template

Vraag:

Voor een WordPress website moet er een nieuwe archief template toegevoegd worden. Deze zal een overzicht van berichten van een custom post type tonen.

Aangezien het honderden berichten zijn wil je ook gebruik maken van paginering navigatie onderaan de pagina.

Om de berichten op te halen maak je gebruik van:

WP_Query();

Om de paginering navigatie te tonen gebruik je:

the_posts_navigation();

In WP_Query stel 10 items per pagina in. Maar onderin komen geen volgende, vorige knoppen of pagina nummers te staan.

Antwoord:

Blijkbaar werkt bovenstaande functie alleen voor standaard WordPress archief templates. Daarom zal je zelf deze functionaliteit moeten programmeren in PHP.

Als voorbeeld heb ik deze website gebruikt. De aangepaste PHP code vind je hieronder.

Stap 1:

Plaats bovenin jouw template de onderstaande PHP code om de getoonde pagina op te halen. Dit is nodig om te bepalen welke berichten er getoond moeten worden.

if ( get_query_var('paged') ) {
    $paged = (int) get_query_var('paged');
} else if ( get_query_var('page') ) {
    $paged = (int)get_query_var('page');
} else {
    $paged = 1;
}

Stap 2:

Voeg onderstaande PHP functie toe aan het functions.php bestand van jouw thema of childthema.

function my_pagination($pages = '', $range = 10)
{
    global $paged;
    if (empty($paged)) {
        $paged = 1;
    }

    if (1 != $pages) {
        echo '<div style="text-align: center; font-size:18px; font-weight: normal;">';

        if ($paged > 1) {
            echo '<a href="' . get_pagenum_link($paged - 1) . '" target="_parent"&gt;&lt; Previous> > | ';
        }

        $links = [];
        for ($i = 1; $i <= $pages; $i++) {
            if (1 != $pages && (!($i <= $paged + $range + 1 || $i >= $paged - $range - 1))) {
                $links[] = ($paged == $i) ? '<span class="current">' . $i . '</span>;' : '<a href="' . get_pagenum_link($i) . '" class="inactive">' . $i . '>';
            }
        }
        echo implode($links, ' - ');

        if ($paged < $pages) {
            echo ' | <a href="' . get_pagenum_link($paged + 1) . '">Next ></a>;';
        }

        echo '</div>' . PHP_EOL;
    }
}

Stap 3:

Zorg dat jouw WP_Query code in de template eruit ziet zoals hieronder. Met ‘paged’ geef je aan WordPress door welke pagina er getoond moet worden. Deze wordt gevuld door de code uit stap 1.

$arguments = [
    'post_type'         => 'cpt_name',
    'orderby'           => 'field_key',
    'order'             => 'asc',
    'posts_per_page'    => 10,
    'paged'             => $paged,
];

$items= new WP_Query($arguments);

Stap 4:

Voeg onderstaande PHP code toe aan de template op de plek waar je de paginering navigatie wilt hebben. Deze roept de functie uit stap 2 aan.

Als parameter geef je het totaal aantal pagina’s mee. Dit wordt berekend in WP_Query() door het totaal aantal berichten / de ‘posts_per_page’ waarde in stap 3.

echo my_pagination($items->max_num_pages)

Bron:

How to add Pagination to the Archive of Custom Post Type in any WordPress Theme

Laat een reactie achter

Your email address will not be published. Required fields are marked *

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.