Problema di paginazione WordPress /page/2 404 - cosa fare?
Mi sono imbattuto nel problema della paginazione /page/2
che restituisce 404 e ho cercato di trovare una soluzione. Ho letto alcuni suggerimenti, ma non hanno ancora risolto il problema.
Funzionante: http://pandasnacozinha.com.br/bolos-doces-e-sobremesas/
Non funzionante: http://pandasnacozinha.com.br/bolos-doces-e-sobremesas/page/2/
Sto cercando di risolvere questo problema da ore. Capisco che WordPress interpreta "page" come un post della categoria "bolos, doces e sobremesas" poiché la mia struttura permalink è /%category%/%postname%/
ma non so come correggerlo.

Ho avuto lo stesso problema e ho notato che nel codice 'posts_per_page = 6'
e nelle Impostazioni/Lettura
nell'argomento 'options-reading' di WordPress, ero impostato a 10. Quando ho impostato tutto allo stesso valore (6 nel mio caso) tutto ha ricominciato a funzionare correttamente.

Questo post mi ha ispirato e ho trovato il motivo per cui succede. Mi hai salvato la giornata!

Questo ha completamente risolto il problema per me. Ancora non capisco il problema. Il mio 'posts_per_page' personalizzato è impostato a 9.

Nel mio caso con permalink personalizzati: /%category%/%postname%/ ho avuto un problema con: /news/page/2/
Alla fine questa soluzione ha funzionato per me (da aggiungere al file 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');

Ho avuto esattamente lo stesso caso - sembra una grande svista permettere la personalizzazione della struttura dei permalink senza dare alcun suggerimento agli utenti che potrebbero dover sovrascrivere manualmente i rewrite... O forse è piuttosto un bug e non dovrebbe essere necessario?

Ho provato per diverse ore, fino a quando ho trovato una soluzione funzionante in questo articolo.
Nel tuo file functions.php
, aggiungi:
/**
* Correggi l'impaginazione nelle pagine di archivio
* Dopo aver aggiunto una regola di riscrittura, vai su Impostazioni > Permalink e clicca Salva per svuotare la cache delle regole
*/
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');
Sostituisci blog
con il nome della tua categoria nel codice sopra.
Dopo aver aggiunto questo codice, assicurati di andare in Impostazioni > Permalink
e cliccare Salva
per svuotare la cache delle regole, altrimenti la regola non verrà applicata.
Spero che questo sia di aiuto!

Questo ha funzionato per me. Mi piacerebbe ancora sapere il "perché" di questo comportamento che è apparso all'improvviso. Ma grazie per la soluzione.

Ho scoperto che modificare la struttura dei permalink ha funzionato per me, guarda:
Il permalink era così nella struttura personalizzata:
/index.php/%year%/%monthnum%/%day%/%postname%/
Poi l'ho cambiato in: Giorno e nome (basta selezionare il pulsante radio) e apparirà così:
/%year%/%monthnum%/%day%/%postname%/
Ho provato e funziona!

La mia soluzione si sviluppa in 3 passaggi:
1- il primo: Installare questo plugin: https://wordpress.org/plugins/category-pagination-fix/
2- quindi: adatta il tuo codice a questa struttura
<?php $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; ?>
<?php
$q=new wp_Query(
array(
"posts_per_page"=>10, // post per pagina
"post_type"=>"", // tipo di post
"meta_key"=>"", // chiave meta
"orderby"=>"meta_value_num", // ordina per valore meta numerico
"order"=>"asc", // ordinamento ascendente
"paged" => $paged, // numero di pagina corrente
)
);
while($q->have_posts())
{
$q->the_post();
?>
<li></li>
<?php
}
wp_reset_postdata();
?>
<div class="pagination">
<?php
global $q;
$big = 999999999; // serve un numero intero improbabile
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- vai in WordPress Impostazioni > Lettura > Numero massimo di articoli da visualizzare nella pagina del blog e inserisci il numero 1

Come hanno già menzionato altri, assicurati che il tuo 'posts_per_page = 6' sia uguale o inferiore all'impostazione in Wordpress > Impostazioni > Lettura > "Le pagine blog mostrano al massimo".
Mi sono imbattuto recentemente in questo problema e la causa era che controllavo completamente il numero di post per pagina dal file template. Se non ci sono abbastanza post per l'ultima pagina, verrà restituito un errore 404.
Ad esempio, avevo impostato i post per pagina a 9, ma con solo 25 post. La prima e la seconda pagina funzionavano, ma la terza pagina restituiva errore 404. Ho impostato l'opzione di WordPress a 1 e lasciato il valore nel file template a 9, e ora funziona come previsto.

Nel mio caso, utilizzando Divi e il plugin PageNavi, il motivo per cui ricevevo l'errore 404 era che il template della pagina (nel mio caso l'archivio) stava ottenendo il parametro di query paged
usando get_query_var( 'paged' )
, invece tutto ciò che dovevo fare era usare la variabile globale come mostrato di seguito:
<?php
/*
Template Name: Archivio
*/
get_header(); ?>
<?php
// $paged è una variabile globale fornita dal 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(); ?>
Questo codice ha corretto i link e risolto i post con il formato nome-post/pagina/N
.
L'impostazione dei permalink è settata su "Nome articolo" cioè http://localhost/articolo-di-esempio/

Nel mio caso avevo questo in un loop:
if (is_category()) $args['posts_per_page'] = 8;
E nelle Impostazioni->Lettura avevo impostato 10 articoli per pagina per blog e feed
Ho cambiato a 8 articoli per pagina nelle Impostazioni->Lettura e ora l'errore 404 è scomparso e tutto sembra funzionare.
Non ho idea del perché ma probabilmente questo potrebbe aiutare qualcuno in futuro

Ecco una generalizzazione della risposta di kregus che corregge tutte le categorie contemporaneamente:
/**
* Correggi la paginazione nelle pagine archivio
*/
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');

Per chi utilizza WooCommerce; stavo cercando la stessa cosa e ho scoperto che WooCommerce modifica il parametro posts_per_page
per le categorie di prodotti.
Vedi: https://woocommerce.com/document/change-number-of-products-displayed-per-page/
Utilizzando il filtro di WooCommerce:
/**
* Modifica il numero di prodotti visualizzati per pagina (pagina shop)
*/
add_filter( 'loop_shop_per_page', 'wc_update_loop_shop_per_page', 20 );
function wc_update_loop_shop_per_page( $cols ) {
// $cols contiene il numero corrente di prodotti per pagina basato sul valore salvato in Opzioni → Lettura
// Restituisci il numero di prodotti che vuoi mostrare per pagina.
$cols = 9;
return $cols;
}
Nel mio caso ho modificato $cols
a 12 e la paginazione ha ricominciato a funzionare correttamente.

Anch'io ho avuto questo problema, ho provato tutte le altre soluzioni presenti in questa pagina ma nulla ha funzionato. Nel mio caso, il problema era causato dall'avere la 'Base delle categorie' uguale al permalink della pagina del blog.
Ad esempio, il permalink della mia pagina del blog era 'articoli' e avevo impostato la 'Base delle categorie' (in Impostazioni > Permalink) anch'essa su 'articoli'. Cambiando la 'Base delle categorie' con qualcos'altro, ho risolto gli errori 404.

Sto ricevendo l'errore 404 quando torno all'URL con /page/2/...
. Quindi vado alla mia pagina 404 di WordPress e aggiungo questo javascript in cima alla pagina di errore:
<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>
Quando torno alla pagina 404, questa porta con sé l'URL, analizzo l'URL e ottengo la stringa URL di cui ho bisogno e ricostruisco un nuovo link per poi reindirizzare al nuovo link ricostruito.

Trovata la soluzione!
Installare questo plugin ha risolto il problema: https://wordpress.org/plugins/category-pagination-fix/
Ho anche dovuto apportare modifiche in Impostazioni > Lettura per mostrare meno di 10 articoli per pagina (ora mostro 6 articoli per pagina, ma qualsiasi numero inferiore a 10 dovrebbe funzionare).
Spero funzioni anche per voi. :)

un plugin obsoleto che risolve un problema specifico con WordPress che è stato risolto nel core 6 anni fa? improbabile che questa sia una buona risposta
