Problemă de paginare WordPress /page/2 404 - ce e de făcut?
M-am confruntat cu problema paginării care dă eroarea 404 la /page/2
și am încercat să găsesc o soluție. Am citit câteva sugestii, dar încă nu m-au ajutat.
Funcționează: http://pandasnacozinha.com.br/bolos-doces-e-sobremesas/
Nu funcționează: http://pandasnacozinha.com.br/bolos-doces-e-sobremesas/page/2/
Încerc de ore întregi să rezolv această problemă. Înțeleg că WordPress presupune că "page" este un articol din categoria "bolos, doces e sobremesas" deoarece structura mea permalink este /%category%/%postname%/
dar nu știu cum să o repar.

Acest post m-a inspirat și am descoperit problema de ce se întâmplă. Mi-ai salvat ziua!

Aceasta a rezolvat complet problema pentru mine. Încă nu înțeleg care era problema. 'posts_per_page' personalizat este setat la 9.

În cazul meu cu legături personalizate: /%category%/%postname%/ Am avut o problemă cu: /news/page/2/
Și în final această soluție a funcționat pentru mine (adaugă în functions.php):
function remove_page_from_query_string($query_string)
{
if ($query_string['name'] == 'page' && isset($query_string['page'])) {
unset($query_string['name']);
$query_string['paged'] = $query_string['page'];
}
return $query_string;
}
add_filter('request', 'remove_page_from_query_string');

Tocmai am avut exact același caz - pare o mare neglijență să permiți personalizarea structurii de permalinkuri fără să oferi vreun indiciu utilizatorilor că ar putea fi nevoie să suprascrie manual regulile de rescriere... Sau poate mai degrabă este un bug și nu ar trebui să fie necesar?

Am încercat câteva ore, până când am găsit o soluție funcțională în acest articol.
În fișierul tău functions.php
, adaugă:
/**
* Repară paginarea pe paginile de arhivă
* După adăugarea regulii de rescriere, mergi la Setări > Legături permanente și dă clic pe Salvează pentru a reîmprospăta cache-ul de reguli
*/
function my_pagination_rewrite() {
add_rewrite_rule('blog/page/?([0-9]{1,})/?$', 'index.php?category_name=blog&paged=$matches[1]', 'top');
}
add_action('init', 'my_pagination_rewrite');
Înlocuiește blog
cu numele categoriei tale în codul de mai sus.
După ce adaugi acest cod, asigură-te că mergi la Setări > Legături permanente
și dai clic pe Salvează
pentru a reîmprospăta cache-ul de reguli, altfel regula nu va fi aplicată.
Sper că te ajută!

Asta a funcționat pentru mine. Aș fi totuși curios să aflu de ce apare acest comportament din senin. Dar mulțumesc pentru soluție.

Am descoperit că schimbarea structurii permalink-ului a funcționat pentru mine, uite:
Permalink-ul era așa în structura personalizată:
/index.php/%year%/%monthnum%/%day%/%postname%/
Apoi l-am schimbat la: Zi și nume (doar selectez butonul radio) și va arăta astfel:
/%year%/%monthnum%/%day%/%postname%/
Am încercat acest lucru și funcționează!

soluția mea este în 3 pași:
1- primul pas: Instalarea acestui plugin: https://wordpress.org/plugins/category-pagination-fix/
2- apoi: potrivește codul tău cu această structură
<?php $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; ?>
<?php
$q=new wp_Query(
array(
"posts_per_page"=>10, // numărul de articole pe pagină
"post_type"=>"", // tipul de postare
"meta_key"=>"", // cheia meta pentru sortare
"orderby"=>"meta_value_num", // ordonează după valoarea numerică a meta_key
"order"=>"asc", // ordonare ascendentă
"paged" => $paged, // numărul paginii curente
)
);
while($q->have_posts())
{
$q->the_post();
?>
<li></li>
<?php
}
wp_reset_postdata();
?>
<div class="pagination">
<?php
global $q;
$big = 999999999; // avem nevoie de un număr întreg improbabil
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $q->max_num_pages
) );
?>
</div>
3- mergi în setările WordPress > citire > numărul maxim de articole pe pagina blogului apoi introdu numărul 1

După cum au menționat și alții, asigură-te că valoarea 'posts_per_page = 6' este egală sau mai mică decât setarea din WordPress Setări > Citire > Pagini blog afișează cel mult.
Am întâlnit recent această problemă și motivul era că controlam complet numărul de articole pe pagină din fișierul template. Dacă nu sunt suficiente articole pentru pagina finală, aceasta va returna eroarea 404.
De exemplu, aveam setat să afișez 9 articole pe pagină, dar aveam doar 25 de articole. Paginile 1 și 2 funcționau, dar pagina 3 returna eroare 404. Am setat opțiunea din WordPress la 1 și am lăsat valoarea 9 în fișierul template, iar acum funcționează corect.

În cazul meu, folosind Divi și pluginul PageNavi, motivul pentru care primeam eroarea 404 era că template-ul paginii (în cazul meu arhiva) prelua parametrul de interogare paged
folosind get_query_var( 'paged' )
, în loc să folosească variabila globală, ca în exemplul de mai jos:
<?php
/*
Template Name: Arhive
*/
get_header(); ?>
<?php
// $paged este o variabilă globală furnizată de tema?
global $paged;
$args = array(
'posts_per_page' => 4,
'post_type' => 'axis',
'paged' => $paged,
);
$myposts = new WP_Query($args);
?>
<div div style="width: 50%; margin: 0 auto;">
<?php while ( $myposts->have_posts() ) : $myposts->the_post(); ?>
<div class="media-body">
<?php the_content(); ?>
</div>
<?php endwhile; wp_reset_postdata(); ?>
<?php wp_pagenavi( array( 'query' => $myposts ) ); ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Acest cod a corectat legăturile și a rezolvat problema cu postările în formatul post-name/page/N
.
Setarea permalinkului este pe "Numele postării", adică http://localhost/sample-post/

În cazul meu, aveam acest cod într-o buclă:
if (is_category()) $args['posts_per_page'] = 8;
Și în Setări->Citire aveam setat să afișez 10 articole pe pagină pentru blog și sindicalizare.
Am schimbat la 8 articole pe pagină în Setări->Citire și acum eroarea 404 a dispărut și totul pare să funcționeze.
Nu am idee de ce, dar probabil acest lucru ar putea ajuta pe cineva în viitor.

Iată o generalizare a răspunsului lui kregus care repară paginarea pentru toate categoriile deodată:
/**
* Repară paginarea pe paginile de arhivă
*/
function my_pagination_rewrite() {
$categories = '(' . implode('|', array_map(function($category){return $category->slug;}, get_categories())) . ')';
add_rewrite_rule($categories . '/page/?([0-9]{1,})/?$', 'index.php?category_name=$matches[1]&paged=$matches[2]', 'top');
}
add_action('init', 'my_pagination_rewrite');

Pentru cei care folosesc WooCommerce; căutam același lucru și am descoperit că WooCommerce modifică posts_per_page
pentru categoriile de produse.
Vezi: https://woocommerce.com/document/change-number-of-products-displayed-per-page/
Folosind filtrul WooCommerce:
/**
* Schimbă numărul de produse afișate pe pagină (pagina de magazin)
*/
add_filter( 'loop_shop_per_page', 'wc_update_loop_shop_per_page', 20 );
function wc_update_loop_shop_per_page( $cols ) {
// $cols conține numărul curent de produse pe pagină bazat pe valoarea stocată în Opțiuni –> Citire
// Returnează numărul de produse pe care dorești să le afișezi pe pagină.
$cols = 9;
return $cols;
}
În cazul meu, am schimbat $cols
la 12 și apoi paginarea a funcționat din nou corect.

Am avut și eu această problemă, am încercat toate celelalte soluții de pe această pagină, dar nimic nu a funcționat. În cazul meu, problema a fost cauzată de faptul că 'Baza categoriei' era aceeași cu permalinkul paginii de blog.
De exemplu, permalinkul paginii mele de blog era 'articole' și aveam setată 'Baza categoriei' (în Setări > Legături permanente) tot la 'articole'. Schimbarea 'Bazei categoriei' la altceva a rezolvat erorile 404.

Primesc eroarea 404 când încerc să accesez URL-ul cu /page/2/...
. Așa că mă duc pe pagina de 404 din WordPress și adaug acest JavaScript în partea de sus a paginii de eroare:
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script>
var getreurl = window.location.href;
if(getreurl != ""){
var res = getreurl.split("/?");
if(res[1] != ""){
var resd = "http://www.yourwebsite.com/list/?"+res[1];
window.location = resd;
}
}
</script>
Când revin pe pagina 404, acesta preia URL-ul, analizez URL-ul și obțin șirul de caractere de care am nevoie, apoi reconstruiesc un link nou și redirecționez către noul link reconstruit.

Am găsit soluția!
Instalarea acestui plugin a rezolvat problema: https://wordpress.org/plugins/category-pagination-fix/
A trebuit să fac și modificări în Setări > Citire pentru a afișa mai puțin de 10 postări pe pagină (acum afișez 6 postări pe pagină, dar orice număr sub 10 ar trebui să funcționeze).
Sper să vă funcționeze și vouă. :)

un plugin învechit care rezolvă o problemă specifică cu WordPress, care a fost rezolvată în nucleu acum 6 ani? puțin probabil să fie un răspuns bun
