wordpress pagination not working in localhost server - wordpress

I have used wordpress below code for pagination in local-host template but dont know why it is not working. Its showing all pages number nicely but any page number i click its only display first page.
global $wp_query;
$total_pages = $wp_query->max_num_pages;
if ($total_pages > 1){
$current_page = max(1, get_query_var('paged'));
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => '/page/%#%',
'current' => $current_page,
'total' => $total_pages,
));
}
my permalink settings is:
localhost/my-blog/sample-post/
and query post:
$args = array( 'post_type' => 'post', 'posts_per_page' => 2);
anybody please give me idea what to do next for working this pagination.

This works with WP_Query. You may try it:
global $wp_query;
$big = 999999999; // Need an unlikely integer
echo paginate_links( array( 'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var( 'paged' ) ),
'total' => $wp_query->max_num_pages,
'end_size'=> 1,
'mid_size'=> 10 ) );
In Settings -> Readings set Blog pages show at most to the number of posts you want to display in each page and in Settings -> Discussion set the pagination behavior

<global $wp_query;
$total = $wp_query->max_num_pages;
// only bother with the rest if we have more than 1 page!
if ( $total > 1 ) {
// get the current page
if ( !$current_page = get_query_var('paged') )
$current_page = 1;
// structure of "format" depends on whether we're using pretty permalinks
$format = empty( get_option('permalink_structure') ) ? '&page=%#%' : 'page/%#%/';
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => $format,
'current' => $current_page,
'total' => $total,
'mid_size' => 4,
'type' => 'list'
));
}
Please set a argument as per requirement and also refer this link My helps you
And let me know if you face problem
Thanks and Regards

I solved the same problem by reading the URL param using straight-up PHP, instead of get_query_var('paged'), simply use this:
$_GET['paged']

Related

Multiple post query with pagination in shortcode

I want to multiple query with pagination of post type POST. I write code but it don't return right post when click for 2nd page or 3rd page. May be pagination is working properly or other errors. I want to multiple query with pagination of post type POST. I write code but it don't return right post when click for 2nd page or 3rd page. May be pagination is working properly or other errors. I can't find it.
function blogpost_shortcode($atts, $content = null){
extract( shortcode_atts( array(
'count' => '1',
), $atts) );
$page = get_query_var('page');
$q1 = new WP_Query( array(
'posts_per_page' => $count,
'post_type' => 'post',
'paged' => get_query_var('page')
) );
$q1_ids = wp_list_pluck( $q1->posts, 'ID' );
$q2 = new WP_Query(array('posts_per_page' => $count, 'post_type' => 'post', 'paged' => get_query_var('page'), 'post__not_in' => $q1_ids));
$blog_markup = '';
$blog_markup .= '
<div class="bwog_blog_wrap">';
while($q1->have_posts()) : $q1->the_post();
$idd = get_the_ID();
$blog_markup .= '
<div class="single_blog_wrap">
<h3>'.get_the_title($idd).'</h3>
</div>
';
endwhile;
while($q2->have_posts()) : $q2->the_post();
$idd = get_the_ID();
$blog_markup .= '
<div class="single_blog_wrap">
<h3>'.get_the_title($idd).'</h3>
</div>
';
endwhile;
$total_pages = $q1->max_num_pages;
$big = 999999999;
if ($total_pages > 1){
$current_page = max(1, get_query_var('page'));
$blog_markup.= '<nav class="page-nav">';
$blog_markup.= paginate_links(array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => $current_page,
'total' => $total_pages,
'prev_text' => 'Prev',
'next_text' => 'Next'
));
$blog_markup.= '</nav>';
}
$blog_markup .= '</div>';
wp_reset_query();
return $blog_markup;
}
add_shortcode('bwog_blog', 'blogpost_shortcode');
It looks like you are checking for the query variable page, but in the pagination code you are setting the format to ?paged=%#%. You'll want to make sure you are using the same query variable everywhere, so you should set the format to ?page=%#%.
Also, unrelated to the answer but something I noticed, you set the variable $page to get_query_var('page'), but then never use it. I would recommend using it everywhere you have get_query_var('page') to make it your code more efficient and maintainable.

wordpress pagination ads extra slashes to url

Working with custom post types I cant seem to get the pagination to work correct. All is working but when I click to the next page the url will get a extra slash in the url, not sure why this is happening but when using the pagination a lot will add every time a new slash to the url.
// out
site.com/projects/ ,
site.com/projects//page/2,
site.com/projects///page/3,
site.com/projects////page/4
...and so on.
// the code used
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = new WP_Query( array(
'post_type' => 'projects',
'posts_per_page' => 5,
'paged' => $paged
) );
if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
the_title();
endwhile;
$total_pages = $query->max_num_pages;
if ($total_pages > 1){
$current_page = max(1, get_query_var('paged'));
echo paginate_links(array(
'base' => get_pagenum_link(1) . '%_%',
'format' => '/page/%#%',
'current' => $current_page,
'total' => $total_pages,
'prev_text' => esc_html__('volgende »', 'infrafocus'),
'next_text' => esc_html__('« vorige' , 'infrafocus'),
));
}
}
wp_reset_postdata();
endif;
Sometimes in the case of Custom post type pagination, you have to add the rewrite rule in your function.php
Add Function like:
function custom_rewrite_basic() {
add_rewrite_rule('^leaf/([0-9]+)/?', 'index.php/projects?page=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');
Please Refer this link for more information : https://codex.wordpress.org/Rewrite_API/add_rewrite_rule
Try changing 'format' => '/page/%#%', to 'format' => 'page/%#%',
User format as below
'format' => '?paged=%#%'
https://codex.wordpress.org/Function_Reference/paginate_links

Wordpress paginated list of terms showing wrong number of pages?

I've created a paginated list of terms for a custom taxonomy, but the pagination is not showing correctly. No matter how many posts per page I set, only two pages are output.
So with 6 posts and set to 6 per page, I see two pages, the second one blank. With 6 posts and 2 per page I see two pages, and there is no third page (I've tried typing /page/3/ into the url bar and the page is not found, so it's not just a problem with the pagination buttons but seems to be a problem with the number of pages being output by Wordpress).
Can anyone see why this might be? How can I get the pagination working correctly?
I've added a bounty to this question, if anyone can suggest a way of getting this pagination working correctly.
UPDATE 19/12:
I'm part of the way to solving this. I've discovered part of the issue seems to be partly to do with the Reading settings in WP. I had the reading settings set to 6 per page, which is why no matter what I set in $posts_per_page in the template file, I only got an output of 2 pages.
Now I can get Wordpress to output all the pages and pagination links if I make sure that the reading settings match the number set in the template file, but I always get an extra output from the for loop, resulting in an empty div. This causes an extra page in some instances depending on the number of posts on the last page. I'm also getting no pagination links on the last page.
Code excerpt from archive-prints.php:
$posts_per_page = 6;
$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$offset = ( $page - 1 );
$categories = get_terms('prints_cat');
for( $i = $offset * $posts_per_page; $i < ( $offset + 1 ) * $posts_per_page; $i++ ) {
$category = $categories[$i];
echo '<div class="cat-preview"><a href="';
echo get_term_link($category->slug, 'prints_cat');
echo '"><h2>';
echo $category->name;
echo '</h2></a></div>';
}
unset( $category );
custom_page_navi();
And the code for my custom_page_navi() function, from my functions.php file:
function custom_page_navi() {
global $wp_query;
$bignum = 999999999;
if ( $wp_query->max_num_pages <= 1 )
return;
echo '<nav class="pagination">';
echo paginate_links( array(
'base' => str_replace( $bignum, '%#%', esc_url( get_pagenum_link($bignum) ) ),
'format' => '',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'prev_text' => 'Prev',
'next_text' => 'Next',
'type' => 'list',
'show_all' => false,
'end_size' => 2,
'mid_size' => 0
) );
echo '</nav>';
}
You could create a custom page template file tpl_list.php with the following code:
<?php
/**
* Template Name: Paginated list of terms for a custom taxonomy
*
*/
// Edit:
$taxonomy = 'prints_cat';
$number = 3; // number of terms to display per page
// Setup:
$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$offset = ( $page > 0 ) ? $number * ( $page - 1 ) : 1;
$totalterms = wp_count_terms( $taxonomy, array( 'hide_empty' => TRUE ) );
$totalpages = ceil( $totalterms / $number );
// Debug:
// printf( 'taxonomy: %s - number: %s - page: %s - offset: %s - totalterms %s - totalpages: %s' , $taxonomy, $number, $page, $offset, $totalterms, $totalpages );
// Here I list all the available paramters to get_terms():
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => true,
'exclude' => array(),
'exclude_tree' => array(),
'include' => array(),
'number' => $number,
'fields' => 'all',
'slug' => '',
'parent' => '',
'hierarchical' => true,
'child_of' => 0,
'get' => '',
'name__like' => '',
'pad_counts' => false,
'offset' => $offset,
'search' => '',
'cache_domain' => 'core'
);
$terms = get_terms( $taxonomy, $args );
foreach ( $terms as $term )
{
printf( '<div class="cat-preview"><h2>%s</h2></div>',
get_term_link($term->slug, 'country'),
$term->name,
$term->name
);
}
// Show custom page navigation
printf( '<nav class="pagination">%s</nav>',
custom_page_navi( $totalpages, $page, 3, 0 )
);
where
function custom_page_navi( $totalpages, $page, $end_size, $mid_size )
{
$bignum = 999999999;
if ( $totalpages <= 1 || $page > $totalpages ) return;
return paginate_links( array(
'base' => str_replace( $bignum, '%#%', esc_url( get_pagenum_link( $bignum ) ) ),
'format' => '',
'current' => max( 1, $page ),
'total' => $totalpages,
'prev_text' => 'Prev',
'next_text' => 'Next',
'type' => 'list',
'show_all' => false,
'end_size' => $end_size,
'mid_size' => $mid_size
) );
}
Create a page (for example called prints ) and select the above page template.
Then you can visit:
example.com/prints/
example.com/prints/page/2/
example.com/prints/page/3/
And if you uncomment the debug line, you will get for example:
taxonomy: prints_cat -
number: 3 -
page: 2 -
offset: 3 -
totalterms 6 -
totalpages: 2
The value of your
'end_size' => 2, 'mid_size' => 0
is different from the the default values mentioned in codex, can you try changing them to
'end_size' => 1,
'mid_size' => 2

Why is my pagination for custom post type not working?

Here is the code I'm using to display the pagination...
<?php
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') ),
'total' => $wp_query->max_num_pages
) );
?>
But when you click next and got to /page/2/ it says "Page Not Found"
what am I doing wrong???
The code above is not working because it is not set for a custom post type.
If you look in the wordpress codex for paginate_links you will find your code under the
Basic Example
To add pagination to your search results and archives, you can use the following example
and is not working for your query because you have different query_vars, the code you should work with should be from the same codex page:
Example With a Custom Query
When querying a loop with new WP_Query set the 'total' parameter to the max_num_pages property of the WP_Query object.
with the query beeing:
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 5,
'category_name' => 'gallery',
'paged' => $paged,
);
$the_query = new WP_Query( $args );
?>
<!-- the loop etc.. -->
and the pagination code:
<?php
$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') ),
'total' => $the_query->max_num_pages
) );
?>
When working with pagination "Page not found" errors usually are caused by missuning the query vars.

WordPress pagination showing extra blank page after filtering past events

I have a list of events that are displaying in date order, with events in the past being hidden.
The issue is that in total, there are 3 pages of events, but once the past events are hidden, there are only enough events to fill 2 pages. However, a third, blank page is still present and can be accessed through the paging links.
This is the code on my events list page:
<?php $today = date("Ymd");?>
<?php $paged = 1;
if ( get_query_var('paged') ) $paged = get_query_var('paged');
if ( get_query_var('page') ) $paged = get_query_var('page');
query_posts( '&post_type=upcomingevents&paged=' . $paged );?>
<?php $loop = new WP_Query( array( 'post_type' => 'upcomingevents', 'paged'=> $paged, 'meta_key' => 'start_date', 'meta_compare' => '>=', 'meta_value' => $today, 'orderby' => 'meta_value_num', 'order' => 'ASC' )); ?>
<?php while ( $loop->have_posts('post_type=upcomingevents') ) : $loop->the_post(); ?>
And this is the paging code in my functions file:
function paginate() {
global $wp_query, $wp_rewrite;
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;
$pagination = array(
'base' => #add_query_arg('page','%#%'),
'format' => '',
'total' => $wp_query->max_num_pages,
'current' => $current,
'show_all' => true,
'type' => 'plain'
);
if ( $wp_rewrite->using_permalinks() ) $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );
if ( !empty($wp_query->query_vars['s']) ) $pagination['add_args'] = array( 's' => get_query_var( 's' ) );
echo paginate_links( $pagination );
}
I have also discovered a second issue, when moving to page 2 or 3 of results, the CSS class of current remains on the number 1 within the paging, so impossible to tell which page you are on.
Any suggestions would be greatly appreciated, many thanks.
$paged value is 0 on 1st page so edit your first snippet:
$paged = 0;
also, as you're using WP_Query, you can safely delete following line, which is probably doing more wrong than good:
query_posts( '&post_type=upcomingevents&paged=' . $paged );

Resources