pagination error on category page in wordpress - php

Pagination not working on category page, the query that i used on category page is below:
number of paginate is correct but while I am clicking on that number it redirect to home page where I am wrong please give me solution,
//code below
$cat_ID = get_query_var('cat');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$article = new WP_Query(array('post_type' => 'post','cat' => cat_ID,
'posts_per_page' => '2', 'paged' => $paged));
while ($article->have_posts()) : $article->the_post();
$post_id = get_the_ID();
// here is my pagination code
$big = 76;
$args = array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'total' => $article->max_num_pages,
'current' => $paged,
'prev_next' => True,
'prev_text' => __('Previous'),
'next_text' => __('Next'),
'type' => 'list');
echo paginate_links($args);

<?php while (have_posts()):the_post(); ?>
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$slide = new WP_Query(array('post_type' => 'post', 'posts_per_page' => '12', 'paged' => $paged));
if ($slide->have_posts()) : while ($slide->have_posts()) : $slide->the_post();
$post_id = get_the_ID();
//show contents here
$big = 76;
$args = array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
'format' => '?paged=%#%',
'total' => $slide->max_num_pages,
'current' => $paged,
'prev_next' => True,
'prev_text' => __('Previous'),
'next_text' => __('Next'),
'type' => 'list');
// ECHO THE PAGENATION
echo paginate_links($args);

hello friend i have faced this type of problem before and the solution that i came with was
Go to setting and then go to to reading tab
there you can see "Blog pages show at most" option
adjust the number according to your need or until the pagination starts working

Change 'format' parameter 'paged' to anything else.
echo paginate_links( array(
...
'format' => '?myparam=%#%',
Then access/get it from your url something like this
$page = (get_query_var('myparam')) ? get_query_var('myparam') : 1;
$slide = new WP_Query(array('post_type' => 'post', 'posts_per_page' => '12', 'paged' => $page));

$category_link = get_category_link( $category_id ) . '/%_%';
'base' => $category_link,
'format' => 'page/%#%',
'total' => $article->max_num_pages

Related

Pagination on a Wordpress Custom Theme

i have a problem with my pagination, it doesn't seem to work when i click on page 3 or 4, when it clearly says i have 4 pages when i do $the_query->max_num_pages. I dont understand what the problem is. This is my code:
$big = 999999999; // need an unlikely integer
$translated = __( 'Page', 'mytextdomain' ); // Supply translatable string
var_dump($the_query->max_num_pages);
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => floor($the_query->max_num_pages),
'before_page_number' => '<span class="screen-reader-text">'.$translated.' </span>'
) );
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
// The Query
$the_query = new WP_Query([
$atts,
'posts_per_page' => 6,
'post__not_in'=> get_option('sticky_post'),
'ignore_sticky_posts' => 1,
'paged' => $paged,
]);

wordpress pagination page links showing 404 error

I am trying to add pagination to product i am getting pagination link eg '1,2 next>>' but when i click on the link it show page not found.
$args = array( 'post_type' => 'product','product_cat' => 'clothing','posts_per_page' => '1', 'order' => 'DESC','paged' => $paged );
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
echo $product->get_regular_price();
endwhile;
$total_pages = $loop->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' => __('« prev'),
'next_text' => __('next »'),
));
}
wp_reset_postdata();
}
I think you should change format to:
'format' => '?paged=%#%',
Because current 'format' (if base is correct) gives you for example https://yourwpwebsite.com/basepage/page/1 but it should be https://yourwpwebsite.com/basepage?page=1 so it is still the same page but with page data passed in URL
I am not sure if current 'base' is correct, but you can also try changing it to:
$loop = new WP_Query( $args );
if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();
echo $product->get_regular_price();
endwhile;
$total_pages = $loop->max_num_pages;
$big = 999999999; // need an unlikely integer
if ($total_pages > 1){
$current_page = max(1, get_query_var('paged'));
echo 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 »'),
));
}
wp_reset_postdata();
}
Try this, if it is not working, provide more details and current HTML output.

Wordpress Custom Post Type Pagination - /page/2/ not found

This is driving me crazy. I've tried every solution I could find but still not working for me.
I have a custom post type.
/**
* Videos Custom Post Type
*/
function videos_post_type() {
register_post_type( 'videos', array(
'labels' => array(
'name' => 'Videos',
'singular_name' => 'Video',
'add_new_item' => 'Add New Video',
'add_new' => 'Add New Video',
'edit_item' => 'Edit Video',
'new_item' => 'New Video',
'all_items' => 'All Videos'
),
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'videos' ),
'menu_icon' => 'dashicons-format-video'
));
}
add_action( 'init', 'videos_post_type' );
Everything is working fine except pagination on the 'Archive' page. Pagination links are showing up properly but when I click on "Next", it ends in page not found error.
<div class="ast-row">
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$loop = new WP_Query( array(
'post_type' => 'videos',
'posts_per_page' => 1,
'orderby'=> 'menu_order',
'paged'=> $paged
) );
while ( $loop->have_posts() ) {
$loop->the_post(); ?>
<div class="ast-col-md-4">
<?php echo the_content(); ?>
</div>
<?php } ?>
</div>
<div class="ast-row">
<?php
echo paginate_links( array(
'total' => $loop->max_num_pages
) );
?>
<?php wp_reset_postdata(); ?>
</div>
Also tried the following to echo_paginate_links()
$big = 999999999;
echo paginate_links( array(
'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $loop->max_num_pages
) );
Moreover-
* I have tried to save permalink
* I have tried to change permalink structure
* I have tried query_posts instead of WP_Query
---none of these worked.
I should also mention that I have not created a single-videos.php template (because I don't need it for this post type) but I don't think that has anything to do with this issue. Please correct me if I am wrong. I just can't get my head around it. I'm using the Astra theme if that helps.
Please share your suggestions. Thanks!
Try below (replace your html)
<?php
global $loop;
$query = $query ? $query : $loop;
$big = 999999999;
$paginate = paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'type' => 'array',
'total' => $query->max_num_pages,
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'prev_previous' =>('← Older posts'),
'prev_next' => ( 'Newer posts →' ),
'prev_text' => __('«'),
'next_text' => __('»'),
));
if ($query->max_num_pages > 1) :
?>
<div class="paginate">
<ul class="pagination">
<?php
foreach ( $paginate as $page ) {
echo '<li>' . $page . '</li>';
}
?>
</ul>
</div>
<?php endif; ?>
Replace
$big = 999999999;
echo paginate_links( array(
'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $loop->max_num_pages
) );
With
global $loop;
$query = $query ? $query : $loop;
$big = 999999999;
$paginate = paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'type' => 'array',
'total' => $query->max_num_pages,
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'prev_previous' =>('← Older posts'),
'prev_next' => ( 'Newer posts →' ),
'prev_text' => __('«'),
'next_text' => __('»'),
));
if ($query->max_num_pages > 1) :
If Not Works I have Another Solusationn Just Ask me
I had the same problem recently. Not sure what the problem was but this worked for me.
$pagination = [
'base' => #add_query_arg('paged','%#%'),
'format' => '',
'total' => $the_query->max_num_pages,
'current' => get_query_var('paged') ?? 1,
'show_all' => false,
'mid_size' => 4,
'type' => 'list',
'next_text' => '»',
'prev_text' => '«'
];
echo paginate_links($pagination);
I got the same issue and just figured out that the cause of my problem is that I had set the same slug to my Custom Post Type and the page showing the new WP_Query.
Hope it will be helpful.

After redirct url pagination not working

This is my pagination code. It's worked well after redirect page url. When I am redirecting url to another page this code not worked. This custom post pagination.
before redirect the pagination hover url was:
http://xxxx/?industry=26&posts_per_page=12&page=3
and after redirect the pagination hover url was (and its not working):
http://xxxx/newpage/?page=2&industry=26&location_company=0&employees=0&type=video
<?php
echo paginate_links( [
'prev_text' => __( 'Previous', 'bizcast' ),
'next_text' => __( 'Next', 'bizcast' ),
'before_page_number' => '',
'screen_reader_text' => '',
'total' => $videos->max_num_pages,
'format' => '?page=%#%',
'current' => ($_GET['page'] ? $_GET['page'] : 1),
'type' => 'list'
] );
?>
Add
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
before loop start and add 'paged' => $paged in wp query arguments.
For example:
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$query_args = array(
'post_type' => 'post',
'category_name' => 'tutorials',
'posts_per_page' => 5,
'paged' => $paged
);

Wordpress pagination don't let me go to page 2 (.htaccess redirection I guess)

I have pagination in my post. I did similar thing before, it worked well. Now I was rewriting code to another page and I'am stuck.
For example I have page with pagination:
http://localhost/est/witaj-swiecie/
And I click on page 2 with link:
http://localhost/est/witaj-swiecie/page/2/
And after it return's me back to:
http://localhost/est/witaj-swiecie/
Before I did it easily on another page but code was a little mess.
My code (with a little cut):
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$this->query = array (
'post_type' => 'oferta',
'post_status' => 'published',
'paged' => $paged,
'pagination' => true,
'posts_per_page' => '1',
'order' => 'ASC',
'orderby' => 'date',
);
$big = 999999999;
$post[0]['pagination'] = paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $query->max_num_pages,
'prev_text' => '« Poprzednia',
'next_text' => 'Następna »',
) );
Everything is done using Example With a Custom Query:
https://codex.wordpress.org/Function_Reference/paginate_links
Okay, I found the problem. I was trying to use those with shortcode on post, not on page. Using it on page solved my problem.

Categories