Correzione 404 per la paginazione dei custom post type

10 lug 2011, 04:09:33
Visualizzazioni: 31.7K
Voti: 10

Ho cercato tutto il giorno di far funzionare questo ma non ho avuto fortuna...

Ho un custom post type chiamato 'news' e un template di archivio (archive-news.php), qui vorrei mostrare 2 post con paginazione, che funziona bene, finché non provo ad andare alla 'pagina successiva' (/news/page/2) che restituisce un errore 404.

Qualcuno sa come correggere questo problema / cosa sto facendo di sbagliato?

Ho letteralmente passato tutto il giorno cercando una soluzione a questo problema cercando su Google e nei forum di WordPress, ho trovato molte soluzioni, nessuna delle quali ha funzionato finora.

La mia funzione del custom post type: http://pastebin.com/uG1L6YNu
La stampa delle mie regole di riscrittura: http://pastebin.com/jbaDANYr

1
Commenti

oh e inoltre... Il mio file news-archive.php: http://pastebin.com/vjcx77F7

Dale-Anthony Dale-Anthony
10 lug 2011 04:09:55
Tutte le risposte alla domanda 4
5
21

Adesso funziona per me... per quelli di voi che hanno lo stesso problema, si è scoperto che tutto il codice era corretto.

Il problema era che WordPress è configurato per mostrare 10 post per pagina di default, il che entrava in conflitto con la mia query (che limitava a 2 post). Per risolvere il problema ho cambiato l'impostazione in WordPress (Impostazioni / Lettura nel pannello di amministrazione) a 1.

11 lug 2011 23:39:37
Commenti

Questo problema si presenta continuamente. IMHO, i custom post type non sono post normali, quindi dovrebbe esserci una variabile di query posts_per_page separata per ogni tipo di post. Comunque, ecco una risposta che mostra come modificare il valore di posts_per_page al volo senza dover modificare le impostazioni nell'amministrazione: http://wordpress.stackexchange.com/questions/30757/change-posts-per-page-count/30763#30763

Dave Romsey Dave Romsey
4 feb 2012 02:41:26

La soluzione proposta da goto10 funziona perfettamente ed è migliore se vuoi ancora utilizzare l'impostazione dei post per pagina per altre pagine. Sono comunque curioso di capire perché succeda questo, è la prima volta che mi capita. In passato sono sempre riuscito a usare posts_per_page normalmente senza che entrasse in conflitto con le impostazioni di WP.

Javier Villanueva Javier Villanueva
23 feb 2012 13:50:17

Grazie mille per questa informazione! Mi stavo strappando i capelli cercando di sistemare le regole di rewrite e tutto il resto, e alla fine il problema era questo.

Chaser324 Chaser324
27 ago 2012 22:11:31

È il 2019 e questa risposta è ancora valida! Incredibile.

Cenlan Cenlan
17 dic 2019 15:13:50

Grazie, molto utile.

user1032559 user1032559
19 apr 2022 23:19:45
2
10

Ho trovato una soluzione qui: http://walrusinacanoe.com/web-development/742

È elegante e funzionale:

add_action( 'parse_query', 'changept' );
function changept() {
    if( is_category() && !is_admin() )
        set_query_var( 'post_type', array( 'post', 'your_custom_type' ) );
    return;
}
26 set 2011 20:40:42
Commenti

Questa soluzione ha effettivamente funzionato per me. L'altra soluzione (WP-Admin / Impostazioni / Lettura / 1) non ha funzionato affatto.

Grazie per questo! (ore sprecate a debug e ricerca)

Esteban Esteban
15 ott 2014 01:03:03

Molti anni dopo e questa funzione ha risolto il problema per me. 3 giorni a strapparmi i capelli! Grazie mille.

Edvin Uddfalk Edvin Uddfalk
21 mag 2024 21:31:53
1

Probabilmente hai già provato questo, ma resettare i permalink può risolvere il problema. Vai su Impostazioni->Permalink e salva nuovamente i permalink.

10 lug 2011 05:21:07
Commenti

Grazie, ho provato a farlo ma il problema persiste.

Dale-Anthony Dale-Anthony
10 lug 2011 12:51:52
2

prova questa variante:

add_action('pre_get_posts','custom_pre_get_posts'); 
function custom_pre_get_posts( $query ) 
{  
    if( $query->is_main_query() && !$query->is_feed() && !is_admin()) {
        $query->set( 'paged', str_replace( '/', '', get_query_var( 'page' ) ) );  
    }  
} 

add_filter('request', 'custom_request');
function custom_request($query_string )
{ 
    if( isset( $query_string['page'] ) ) { 
        if( ''!=$query_string['page'] ) { 
            if( isset( $query_string['name'] ) ) { 
                unset( $query_string['name'] ); 
            } 
        } 
    } return $query_string; 
}
5 mag 2021 16:56:08
Commenti

Puoi spiegare la tua soluzione?

tehlivi tehlivi
13 mag 2021 04:32:34

Il codice sembra mostrare tutto, ricostruisce correttamente la stringa di query. Se una pagina è aperta, ma non è erroneamente riflessa nell'URL, ricostruisce e aggiunge lo slug mancante alla sezione.

ktscript ktscript
13 mag 2021 07:28:30