0

I try to use the Eric Meyer's pagination codes to make it working for page post type, but unable to figure out how to make it working. It's always show the first page.

Here is the codes:

<?php /* Pagination - Thanx to and (c) 2009 by Eric Martin - License: GNU GENERAL PUBLIC LICENSE */
function paginate($args = null) {
    $defaults = array( 
        'page' => null,
        'pages' => null, 
        'range' => 3,
        'gap' => 3, 'anchor' => 1,
        'before' => '<div class="paginate">', 'after' => '</div>',
        'nextpage' => __('&raquo;'), 'previouspage' => __('&laquo'),
        'echo' => 1
    );
    $r = wp_parse_args($args, $defaults);

    extract($r, EXTR_SKIP);
    if (!$page && !$pages) {
        global $wp_query;
        $page = get_query_var('paged');
        $page = !empty($page) ? intval($page) : 1;
        $posts_per_page = intval(get_query_var('posts_per_page'));
        $pages = intval(ceil($wp_query->found_posts / $posts_per_page));
    }   

    $output = "";
    if ($pages > 1) {   
        $output .= "$before";
        $ellipsis = "<span class='gap'>...</span>";
        if ($page > 1 && !empty($previouspage)) {
            $output .= "<a href='" . get_pagenum_link($page - 1) . "' class='prev' >$previouspage</a>";
        }       
        $min_links = $range * 2 + 1;
        $block_min = min($page - $range, $pages - $min_links);
        $block_high = max($page + $range, $min_links);
        $left_gap = (($block_min - $anchor - $gap) > 0) ? true : false;
        $right_gap = (($block_high + $anchor + $gap) < $pages) ? true : false;
        if ($left_gap && !$right_gap) {
            $output .= sprintf('%s%s%s', 
                paginate_loop(1, $anchor), 
                $ellipsis, 
                paginate_loop($block_min, $pages, $page)
            );
        }
        else if ($left_gap && $right_gap) {
            $output .= sprintf('%s%s%s%s%s', 
                paginate_loop(1, $anchor), 
                $ellipsis, 
                paginate_loop($block_min, $block_high, $page), 
                $ellipsis, 
                paginate_loop(($pages - $anchor + 1), $pages)
            );
        }
        else if ($right_gap && !$left_gap) {
            $output .= sprintf('%s%s%s', 
                paginate_loop(1, $block_high, $page),
                $ellipsis,
                paginate_loop(($pages - $anchor + 1), $pages)
            );
        }
        else {
            $output .= paginate_loop(1, $pages, $page);
        }
        if ($page < $pages && !empty($nextpage)) {
            $output .= "<a href='" . get_pagenum_link($page + 1) . "' class='next' >$nextpage</a>";
        }
        $output .= $after;
    }
    if ($echo) {
        echo $output;
    }
    return $output;
}
function paginate_loop($start, $max, $page = 0) {
    $output = "";
    for ($i = $start; $i <= $max; $i++) {
        $output .= ($page === intval($i)) 
            ? "<span class='page current'>$i</span>" 
            : "<a href='" . get_pagenum_link($i) . "' class='page paginate' >$i</a>";
    }
    return $output;
}
?>

Could somebody give a solution?

1 Answer 1

0

Actually, I think you don't need too much like above on this

For example, a loop you use to retrieve pages,

$args = array(
    'posts_per_page' => 5,
    'post_type' => 'page',
    'paged' => $paged,
);

$the_query = new WP_Query( $args );
?>
<!-- the loop etc.. -->

Then get the paginate links

<?php
$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' => $the_query->max_num_pages //The custom WP_Query instance
) );
?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.