简体   繁体   中英

Numeric pagination not appearing inside custom loop - Wordpress

I have been trying to add numeric pagination to my posts page which are filtered by category. The problem is that pagination won't appear when I call it. Pagination works perfectly fine when I use previous_posts_link and next_posts_link but this is not excatly what I want to achieve. What am I missing here?

My filtered category page.

<?php
// Get post ID


$post_type = get_post_type( $post->ID );

// Get category ID
$category_id = get_cat_ID(single_cat_title('', false));

// Wordpress pagination
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

// WP_Query arguments
$args_news = array (
    'post_type'             => array( 'post' ),
    'pagination'            => true,
    'posts_per_page'        => '2',
    'orderby'               => 'date',
    'paged'                 => $paged,
    'cat'                   => $category_id,
    
);

// The Query
$query = new WP_Query( $args_news );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        
        $query->the_post(); ?>
        
     <?php get_template_part('categorytwo',get_post_format()); ?>
<?php }

} else { 
    // no news found
}
?>

<div class="pagination">
    <?php my_pagination(); ?>
    </div>

<?php
// Reset postdata
wp_reset_postdata();

?>
This pagination function works fine on my index.php page when I call it out.

<?php
if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
else { $paged = 1; }

query_posts(array(
    'post_type'      => 'post', // You can add a custom post type if you like
    'paged'          => $paged,
    'posts_per_page' => 4
));

if ( have_posts() ) : ?>

<?php while ( have_posts() ) : the_post(); ?>

    <?php get_template_part('catalog',get_post_format()); ?>

<?php endwhile; ?>


<div class="pagination">
    <?php my_pagination(); ?>
    </div>

<?php else : ?>

    <?php // no posts found message goes here ?>
<?php wp_reset_query(); // add this ?>
<?php endif; ?>

Functions.php

if ( ! function_exists( 'my_pagination' ) ) :
    function my_pagination() {
        global $wp_query;

        $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') ),
            'prev_text' => __('« PREV'),
                        'next_text' => __('NEXT »'),
            'total' => $wp_query->max_num_pages

        ) );
    }
endif;

When I call it out on my index.php page it works fine.

<?php
if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
else { $paged = 1; }

query_posts(array(
    'post_type'      => 'post', // You can add a custom post type if you like
    'paged'          => $paged,
    'posts_per_page' => 4
));

if ( have_posts() ) : ?>

<?php while ( have_posts() ) : the_post(); ?>

    <?php get_template_part('catalog',get_post_format()); ?>

<?php endwhile; ?>


<div class="pagination">
    <?php my_pagination(); ?>
    </div>

<?php else : ?>

    <?php // no posts found message goes here ?>
<?php wp_reset_query(); // add this ?>
<?php endif; ?>

Use this code on your loop:

<div class="posts_blog">
    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $args = array(
        'post_type' => 'post', // Your post type name
        'posts_per_page' => 5,
        'paged' => $paged,
    );
    $loop = new WP_Query($args);
    if ($loop->have_posts()) {
        while ($loop->have_posts()) : $loop->the_post();
            ?>
     
          <div class="posts_container ">
             // Posts format: <?php get_template_part('catalog',get_post_format()); ?>
          </div>
    
         <?php
        endwhile;
        $total_pages = $loop->max_num_pages;
        if ($total_pages > 1) {
            ?>
            <div class="pagination">
                <?php
                $current_page = max(1, get_query_var('paged'));
    
                echo paginate_links(array(
                    'base' => get_pagenum_link(1) . '%_%'.'/#posts-blog',
                    'format' => '/page/%#%',
                    'current' => $current_page,
                    'total' => $total_pages,
                    'prev_text' => __('<'),
                    'next_text' => __('>'),
                ));
                ?>
            </div>
            <?php
        }
    }
    wp_reset_postdata();
    
    if (function_exists("pagination")) {
        pagination($wp_query->max_num_pages);
    }
    ?>
    
    </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM