I'm in the middle of developing a site (http://he.leavingworkbehind.com/) which features a single post on the home page, as determined by the "Blog pages show at most" option in Settings > Reading.

However, I've created a tag.php page where I'd like a complete list of posts (for the relevant tag) to be displayed. I've managed to find the code that can create that list:


if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<ul class="post-tag-list">
        <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>

<?php endwhile; endif; ?>

The list is only returning one result though -- presumably because of the aforementioned "Blog pages show at most" setting.

So my question is this: how do I override this setting? To be more specific, what exact code should I insert on tag.php?

I have a feeling that I may have already seen the answer here on Stack Exchange but am too ignorant of PHP coding to implement it successfully. Your help would be much appreciated!




what exact code should I insert on tag.php?


To alter the main query, use the pre_get_posts action, which runs before the main query and before the template is loaded. If you modify a query in the template, you're running an additional query, which is a waste of resources.

This would go in your theme's functions.php, or a plugin.

function wpa_tag_posts_per_page( $query ) {
    if( ! is_admin()
        && $query->is_tag()
        && $query->is_main_query() ) {
            $query->set( 'posts_per_page', 10 );
add_action( 'pre_get_posts', 'wpa_tag_posts_per_page' );

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