By Ead Wig


2019-06-12 06:17:48 8 Comments

I am creating category and tag page templates for my client so they can post news articles to the news category page and specific news pages separated by tag with a pagination nav at the bottom of each page. What I noticed, however, is the pagination nav takes account of all of the posts belonging to any category or having any tag.

I am aware that paginate_links() does not pass an argument in any way similar to the category_name argument for WP_Query(). Keeping this in mind, I spent Googling for a solution to excluding all of the irrelevant posts from the scope of paginate_links() with no luck.

Can you write paginate_links() so that the function targets a specific category or tag? If so, please help me work out how.

The below is the code including the query and pagination function:

<?php
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
        $args = array(
            'post_type' => 'post',
            'post_status'=>'publish',
            'category_name' => 'NEWS',
            'tag_slug__and' => $tags,
            'posts_per_page' => 2,
            'paged' => $paged
        );
    $the_query = new WP_Query($args); ?>

<?php if ( $the_query->have_posts() ) :  ?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post();  ?>
            <div class="inner">
                <?php the_content(); ?>
            </div>
    <?php endwhile; ?>

    <div class="pagination">
        <?php
            echo paginate_links( array(
                'format'  => 'page/%#%',
                'current' => $paged,
                'total'   => $the_query->max_num_pages,
                'mid_size'        => 2,
                'prev_text'       => __('&laquo; Previous Page’),
                'next_text'       => __(‘Next Page &raquo;')
            ) );
        ?>
    </div>

<?php endif; ?>

Thank you for reading this.

Ead

1 comments

@Ead Wig 2019-06-13 06:47:51

The tag template page began displaying posts for specific tags once I replaced the argument statement with the following, which is great!!:

$tags = get_the_tags();
$tag = $tags[0]->name;

$args = array(
    'post_type' => 'post',
    'post_status'=>'publish',
    'category_name' => 'NEWS',
    'tag_slug__and' => $tag,
    'posts_per_page' => 2,
    'paged' => $paged
);

However, when I click on a pagination link on the tag archive page, Chrome returns 'This localhost page can’t be found'...

@Sally CJ 2019-06-13 08:02:32

Actually, that error 404 is likely because of conflict with the main query on the category archive page. You'd need to tweak the paginate_links() format.

@Ead Wig 2019-06-17 09:22:13

The pagination links seem to be showing correct pretty URLs such as /category/news/page/2. So as @SallyCJ pointed out, the cause of this problem is the way paginate_links() is set up? I can't spot any anomaly with the function...

@Sally CJ 2019-06-17 12:14:37

When I said "conflict", I mean something like this: Let's say your category is foo, and the main query had 3 pages, while the custom query had 4 (or more) pages. So you visited /category/foo/page/2 (the main query) and it worked well. Then you visited /category/foo/page/4 (the custom query), but got the error 404. Why? Because WordPress uses the main query with the requested URL and since the main query had only 3 pages of results, that's why the error 404 came up despite that you're actually navigating through the custom query's results.

@Sally CJ 2019-06-17 12:15:56

And you could overcome the issue by tweaking the pagination links (their URL format) - use an "ugly" URL and use my_paged as the page number's key (the default is paged). But is it really necessary for you to make the custom query in the category template?? :) How about creating a standard Page (post type of page) and make your custom queries there (in a custom Page template)?

Related Questions

Sponsored Content

1 Answered Questions

Pagination for a cpt filtered with a category

1 Answered Questions

0 Answered Questions

How can I add attributes to paginate_links?

1 Answered Questions

1 Answered Questions

[SOLVED] How to remove_query_arg() for paginate_links()

1 Answered Questions

1 Answered Questions

[SOLVED] Get tags specific category

  • 2012-12-05 09:26:33
  • Aina-Lluna Taylor
  • 4527 View
  • 2 Score
  • 1 Answer
  • Tags:   categories tags

1 Answered Questions

[SOLVED] Customized landingpages for categories

  • 2013-04-09 17:23:20
  • Dan
  • 31 View
  • 1 Score
  • 1 Answer
  • Tags:   categories

1 Answered Questions

Category vs Tag vs Table

  • 2013-03-17 03:12:55
  • Ted
  • 82 View
  • 2 Score
  • 1 Answer
  • Tags:   categories tags

2 Answered Questions

[SOLVED] Add exception for specific tag

  • 2012-03-14 16:35:41
  • Dustin J
  • 607 View
  • 0 Score
  • 2 Answer
  • Tags:   tags exclude

Sponsored Content