Perché "/page/2/" non funziona?

6 mar 2012, 01:30:06
Visualizzazioni: 66.5K
Voti: 15

Ho finalmente fatto funzionare la paginazione con il codice sottostante, ma ora i link di paginazione puntano a /videos/page/2/, che non esiste. Come posso far funzionare la pagina 2?

<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=videos&showposts=1'.'&paged='.$paged);

while ($wp_query->have_posts()) : $wp_query->the_post();
  //visualizza contenuti
endwhile;           

php  wp_pagenavi();
 ?>
2
Commenti

Non consiglierei di sovrascrivere la query principale in quel modo, hai considerato l'uso di pre_get_posts? In questo modo puoi utilizzare il codice di impaginazione integrato invece di scriverne uno tuo, e puoi semplificare il tutto con un loop standard dei post

Tom J Nowell Tom J Nowell
7 feb 2016 15:32:27

Inoltre, WordPress fornisce una pagina di archivio standard per i tipi di post, quindi dovresti già avere un archivio di post all'indirizzo /videos/ che caricherà archive-videos.php, senza bisogno di modificare le query

Tom J Nowell Tom J Nowell
7 feb 2016 15:33:26
Tutte le risposte alla domanda 5
4
21

Trovata la risposta:

Dopo una lunghissima giornata di debug nel core di WordPress, sono riuscito a risolvere questo problema.

Fondamentalmente, NON PUOI avere una PAGINA e un CUSTOM POST TYPE con lo stesso nome. Se lo fai, le regole di riscrittura dei permalink si confondono e generano un errore 404.

Una soluzione molto semplice che sto usando è: la pagina che elenca i custom post type è chiamata al plurale (es. prodotti) e il nome effettivo del post type è al singolare (es. prodotto). In questo modo non entrano in conflitto e tutto funziona correttamente.

Fatto! Spero che questo farà risparmiare tempo a molte persone.

6 mar 2012 01:53:39
Commenti

Immagino che non solo per i post personalizzati, ma non puoi avere nemmeno un post e una pagina con lo stesso nome.

Rutwick Gangurde Rutwick Gangurde
6 mar 2012 05:53:05

9 anni sono passati, ancora attuale! Grazie

Sid Sid
30 mar 2021 14:18:07

Non ho idea di cosa significhi... Ma so che è la soluzione!

Jamie Hutber Jamie Hutber
17 set 2021 02:31:53

Questo post mi ha aiutato. Non sono sicuro che sia esattamente lo stesso problema, ma rinominare la mia pagina da search/ a search-2 ha risolto un problema simile di paginazione. Suppongo di avere un conflitto nel mio tema con lo slug search/. Qualcuno può suggerire come confermarlo? Non trovo alcun riferimento a "search" in wp_posts - post_name.

jnthnclrk jnthnclrk
7 nov 2023 01:37:01
0

Dopo molto tempo ho trovato una soluzione per questo problema (grazie a franzblog).

Se stai utilizzando la versione 4.2 o superiore, devi aggiungere le seguenti righe nel tuo file functions.php:

add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
    if ( is_paged() && is_singular() ) $redirect_url = false; 
    return $redirect_url; 
}

Ora tutto funziona correttamente!

7 feb 2016 15:16:17
0

NON PUOI avere una PAGINA e un CUSTOM POST TYPE con lo stesso nome

Forse tre anni fa era impossibile, ma ora PUOI.

Primo, aggiungi queste righe agli $args del tuo post type:

'has_archive' => false,
'rewrite'     => array(
                 'slug'       => 'il-tuo-slug', // se hai bisogno dello slug
                 'with_front' => false,
                 ),

Secondo, in functions.php aggiungi l'azione:

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    global $wp_post_types;
    foreach ($wp_post_types as $wp_post_type) {
        if ($wp_post_type->_builtin) continue;
        if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
            $slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
            $page = get_page_by_slug($slug);
            if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
        }
    }
}

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;

    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );

    return ($page ? get_post($page, $output) : NULL);
}

Non dimenticare di svuotare le regole di riscrittura nel pannello di controllo.

30 lug 2015 15:34:09
1

Una possibilità è che, nella dashboard di amministrazione Impostazioni -> Lettura, se hai selezionato una Pagina articoli, l'opzione Le pagine del blog mostrano al massimo entrerà in conflitto con la tua query personalizzata posts_per_page in quella pagina.

Quindi assicurati di deselezionare la pagina degli articoli o di far corrispondere il numero di articoli per pagina con l'opzione Le pagine del blog mostrano al massimo in Impostazioni -> Lettura.

23 mag 2021 19:16:18
Commenti

Grazie! Ho passato così tanto tempo a cercare di capire qual era il problema

probablybest probablybest
3 mag 2023 17:33:00
0

Dopo aver eseguito il debug per molto tempo, ho finalmente trovato la soluzione riguardante il problema di paginazione

Fondamentalmente, in WordPress, non puoi avere una PAGINA e un TIPO DI POST PERSONALIZZATO con lo stesso nome. Se lo fai, le regole di riscrittura dei permalink si confonderanno e genereranno un errore 404.

22 set 2020 18:45:26