I'm using the code below to create pagination for my post results, it works fine but is it possible to add a "view all posts on one page" button to the pagination?
This would presumably override the pagination code and just display everything all posts on one page.
function numeric_pagination ($pageCount = 9, $query = null) {
if ($query == null) {
global $wp_query;
$query = $wp_query;
}
if ($query->max_num_pages <= 1) {
return;
}
$pageStart = 1;
$paged = $query->query_vars['paged'];
// set current page if on the first page
if ($paged == null) {
$paged = 1;
}
// work out if page start is halfway through the current visible pages and if so move it accordingly
if ($paged > floor($pageCount / 2)) {
$pageStart = $paged - floor($pageCount / 2);
}
if ($pageStart < 1) {
$pageStart = 1;
}
// make sure page start is
if ($pageStart + $pageCount > $query->max_num_pages) {
$pageCount = $query->max_num_pages - $pageStart;
}
?>
<div id="pagination">
<?php
if ($paged != 1) {
?>
<a href="<?php echo get_pagenum_link(1); ?>" class="numbered page-number-first"> <span>‹ <?php _e('Newest', 'rhinoplasty'); ?></span></a>
<?php
}
// first page is not visible...
if ($pageStart > 1) {
//echo 'previous';
}
for ($p = $pageStart; $p <= $pageStart + $pageCount; $p ++) {
if ($p == $paged) {
?>
<span class="numbered page-number-<?php echo $p; ?> current-numeric-page"><? php echo $p; ?></span>
<?php } else { ?>
<a href="<?php echo get_pagenum_link($p); ?>" class="numbered page-number-<? php echo $p; ?>"><span><?php echo $p; ?></span></a>
<?php
}
}
// last page is not visible
if ($pageStart + $pageCount < $query->max_num_pages) {
//echo "last";
}
if ($paged != $query->max_num_pages) {
?>
<a href="<?php echo get_pagenum_link($query->max_num_pages); ?>" class="numbered page-number-last"><span><?php _e('Oldest', 'rhinoplasty'); ?> ›</span></a>
<?php } ?>
</div>
<?php }
I'm not really sure how to go about doing this, any suggestions would be greatly appreciated. Changing to different pagination code is also fine if that will work better.
Just to clarify my question, I want to add a 'view all posts on one page' functionality, basically over-riding the pagination code - this would be done by clicking a "view all" link to the right of the pagination menu ( 4 5 ... last Next >> View All> ).
Update - almost there I think:
I've added this:
<?php
$Path=$_SERVER['REQUEST_URI'];
$URI='http://sitename.com'.$Path;
$nopage = add_query_arg( 'paged', 'no', $Path );
?>
<a href="<?php echo $nopage; ?>">View All</a>
Which reloads my page with sitename.com?paged=no, but it still shows pagination - I'm not sure how to override the pagination.
UPDATE:
Here is how I ended up solving it in case this helps anyone else.
After the above code and before the final I added:
if (isset($_GET['viewall']))
{
function view_allposts( $query ) {
$query->set( 'posts_per_page', -1 );
}
add_action( 'pre_get_posts', 'view_allposts' );
}
if(!$_GET['viewall']){ ?>
<a class="numbered" href="<?php echo add_query_arg( array( 'viewall' => "true" ), get_pagenum_link(1) ); ?>">Show All >></a>
<?php } ?>
Works perfectly! Thanks for your help on this Kaiser, although I used a different solution I learned a lot from the links you provided.