Paginatie functies voor je maatwerk WordPress thema

Als je je eigen WordPress thema aan het bouwen bent, of een bestaand thema aan het aanpassen, en je wilt paginatie toevoegen, dan kan je wel eens rare resultaten krijgen. WordPress hanteert namelijk verschillende variabelen voor de homepage en voor de andere pagina’s. Als je dit niet weet, kan je soms eindeloos zoeken waarom je toch de “page not found”/404 foutmelding krijgt bij paginatie/paging (wat is het Nederlandse woord hiervoor eigenlijk?).
Om de eigenaardigheden van WordPress hieromtrent te ondervangen gebruik ik altijd de volgende functies (zet in je functions.php):

/*
*     Pagination functionality
*/

function paged() {
        if ( get_query_var('paged') ) {
        $paged = get_query_var('paged');
        } elseif ( get_query_var('page') ) {
            $paged = get_query_var('page');
        } else {
            $paged = 1;
        }
        return $paged;
}

function get_pagination_html($the_query) {
        $big = 999999999; // need an unlikely integer
        $html = paginate_links( array(
            'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format' => '?paged=%#%',
            'current' => max( 1, paged() ),
            'total' => $the_query->max_num_pages,
            'type'  => 'list'
        ) );

    return $html;
}

Je kan nu op de gewenste pagina de volgende code gebruiken:

$args = array(
  'order'     => 'DESC',
  'paged'     => paged(),
  'post_type' => 'post',
);

$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) {
  while ( $the_query->have_posts() ) {
    $the_query->the_post();
    ?>
        <h1><a href="<?php the_permalink();?>"><?php the_title();?></a></h1>
    <?php
   }
}
  echo get_pagination_html($the_query);
  wp_reset_postdata();
  ?>

In dit voorbeeld zie je dat het resultaat van de functie paged() als input wordt meegegeven aan de argumenten van de wp_query.

Tenslotte krijgt de paginatie html nog de query mee als variabele. De output is een standaard WordPress paginatie.