WordPress – paginacja

  wordpress

Czasem wystarczy dodać

echo paginate_links( );

W innych przypadkach:

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
 $projects = new WP_Query(array(
 'post_type' => 'post',
 'posts_per_page' => 12,
 'paged' => $paged,
 ));

UWAGA: jeżeli query jest na statycznej stronie głównej, to pobieramy zmienną „page” a nie „paged”.

następnie do wyświetlenia paginacji używamy takiego kodu:

$big = 999999999; // need an unlikely integer
 
 echo paginate_links( array(
 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
 'format' => '?paged=%#%',
 'current' => max( 1, get_query_var('paged') ),
 'total' => $rows->max_num_pages,
 'prev_text' => __( '«', 'textdomain' ),
 'next_text' => __( '»', 'textdomain' ),
 ) );

Linki paginacji przekierowują na pierwszą stronę

Nie wiem, skąd ten błąd. Po prostu nagle ucina /page/2/ i przekierowuje na główną. Znalazłem rozwiązanie, ale podobno może mieć to dziwne konsekwencje z przekierowaniami. Trzeba umieścić to w functions.php

add_filter('redirect_canonical','pif_disable_redirect_canonical');

function pif_disable_redirect_canonical($redirect_url) {
    if (is_singular()) $redirect_url = false;
return $redirect_url;
}

Nowy wordpress

<?php
            $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
            global $wp_query;
            $news = new WP_Query(array(
                'post_type' => 'post',
                'posts_per_page' => 1,
                'paged' => $paged,
            ));
        ?>
<?php
                $wp_query->max_num_pages = $news->max_num_pages;
            ?>
            <div class="pagination">
            <?php

                $args = wp_parse_args(
                    $args,
                    array(
                        'mid_size'           => 1,
                        'prev_text'          => _x( '<', 'previous set of posts' ),
                        'next_text'          => _x( '>', 'next set of posts' ),
                        'aria_label'         => __( 'Posts' ),
                    )
                );

                $links = paginate_links( $args );
                echo $links;

                // echo get_the_posts_pagination();
            ?>
            </div>