# "View All" Link on Paginated Archives

> Adds a "View all 42 posts on one page" link under paginated category, tag and other archives that are not too large, for readers who prefer to scroll or search the page.

- Type: PHP
- Runs: Run everywhere
- Category: [Archives](https://wpide.com/library/category/archive/)
- Tags: archives, pagination, navigation
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/view-all-link-on-archives/

## Code

```php
// Show the "View all" option only when the archive has no more than this many posts.
$wpide_view_all_max = 150;
// Link text; %d is the number of posts.
$wpide_view_all_label = 'View all %d posts on one page';

$wpide_view_all_on = function () {
    return isset( $_GET['view'] ) && 'all' === sanitize_key( wp_unslash( $_GET['view'] ) );
};

add_action( 'pre_get_posts', function ( $query ) use ( $wpide_view_all_max, $wpide_view_all_on ) {
    if ( ! $wpide_view_all_on() || is_admin() || ! $query->is_main_query() || ! $query->is_archive() ) {
        return;
    }

    $query->set( 'posts_per_page', absint( $wpide_view_all_max ) );
    $query->set( 'paged', 1 );
} );

// The single-page copy is for readers; search engines keep the normal paginated pages.
add_filter( 'wp_robots', function ( $robots ) use ( $wpide_view_all_on ) {
    if ( $wpide_view_all_on() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    return $robots;
} );

$wpide_view_all_link = function () use ( $wpide_view_all_max, $wpide_view_all_label ) {
    global $wp_query;

    if ( ! is_archive() || isset( $_GET['view'] ) || $wp_query->max_num_pages < 2 || $wp_query->found_posts > $wpide_view_all_max ) {
        return '';
    }

    $url = add_query_arg( 'view', 'all', get_pagenum_link( 1, false ) );

    return '<p class="wpide-view-all" style="text-align:center;margin:1.5em 0;"><a href="' . esc_url( $url ) . '">' . esc_html( sprintf( $wpide_view_all_label, (int) $wp_query->found_posts ) ) . '</a></p>';
};

// Classic themes: after the last post.
add_action( 'loop_end', function ( $query ) use ( $wpide_view_all_link ) {
    static $done = false;

    if ( $done || wp_is_block_theme() || ! $query->is_main_query() ) {
        return;
    }

    $done = true;
    echo $wpide_view_all_link(); // phpcs:ignore WordPress.Security.EscapeOutput -- escaped when built.
} );

// Block themes: after the page numbers.
add_filter( 'render_block_core/query-pagination', function ( $content ) use ( $wpide_view_all_link ) {
    static $done = false;

    if ( $done || '' === trim( $content ) ) {
        return $content;
    }

    $done = true;

    return $content . $wpide_view_all_link();
} );
```

## Notes

Only shown for archives up to 150 posts; the single-page version is marked noindex.

## How to use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find ""View All" Link on Paginated Archives" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
