Perché “/ page / 2 /” non funziona?


11

Finalmente la paginazione ha funzionato con il codice seguente, ma ora la paginazione si collega a / videos / page / 2 /, che non esiste. Come faccio a 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();
  //display stuff
endwhile;           

php  wp_pagenavi();
 ?>

Non consiglierei di ignorare la query principale in questo modo, hai preso in considerazione l'utilizzo pre_get_posts? Quindi puoi utilizzare il codice di paginazione incorporato anziché scrivere il tuo, e puoi semplificare fino a un normale ciclo postale
Tom J Nowell

Inoltre, WordPress fornisce una pagina di archivio standard per i tipi di post, quindi dovresti già avere un archivio di post /videos/che verrà caricato archive-videos.php, che non richiede problemi con le query
Tom J Nowell

Risposte:


15

Trovato la risposta:

Dopo una lunga giornata di debug tramite wordpress core, sono riuscito a risolvere questo problema.

Fondamentalmente, CANT ha una PAGINA e un TIPO POST CUSTOM con lo stesso nome. Se lo fai, le regole di riscrittura del permalink verranno confuse e scateneranno un 404.

Una soluzione molto semplice che sto usando è: La pagina che elenca i tipi di posta personalizzati viene chiamata al plurale (ad es. Prodotti) e il nome del tipo di posta effettivo è in singolare (ad es. Prodotto). Quindi non sono in conflitto ed è tutto a posto.

Fatto fatto! Spero che questo salverà il tempo delle persone.


6
Immagino, non solo un post personalizzato, non puoi avere anche un post e una pagina con lo stesso nome.
Rutwick Gangurde,

4

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

Se si utilizza la versione 4.2 o successiva, è necessario aggiungere le seguenti righe nel functions.phpfile:

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 funziona tutto bene!


1

CANT hai una PAGINA e un TIPO POST CUSTOM con lo stesso nome

Forse l'albero anni fa era impossibile, ma ora PUOI.

Innanzitutto, aggiungi queste righe al $argstipo di post:

'has_archive' => false,
'rewrite'     => array(
                 'slug'       => 'your slug', // if you need slug
                 'with_front' => false,
                 ),

In secondo luogo, in functions.phpaggiunta 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 nella dashboard.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.