Mengapa "/ halaman / 2 /" tidak berfungsi?

11

Akhirnya pagination dapat berfungsi dengan kode di bawah ini, tetapi sekarang pagination terhubung ke / videos / page / 2 /, yang tidak ada. Bagaimana caranya agar halaman 2 berfungsi?

<?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();
 ?>
Dave
sumber
Saya tidak akan merekomendasikan mengesampingkan permintaan utama seperti itu, sudahkah Anda mempertimbangkan untuk menggunakan pre_get_posts? Kemudian Anda dapat menggunakan kode pagination bawaan daripada menulis sendiri, dan Anda dapat menyederhanakannya ke loop post standar
Tom J Nowell
Selain itu, WordPress menyediakan halaman arsip standar untuk jenis posting, jadi Anda seharusnya sudah memiliki arsip posting /videos/yang akan memuat archive-videos.php, yang tidak perlu dipusingkan dengan pertanyaan
Tom J Nowell

Jawaban:

15

Ditemukan jawabannya:

Setelah seharian debugging melalui inti wordpress, saya berhasil menyelesaikan masalah ini.

Pada dasarnya, Anda TIDAK BISA memiliki HALAMAN dan JENIS POS KUSTOM dengan nama yang sama. Jika Anda melakukannya, aturan penulisan ulang permalink akan membingungkan dan memicu 404.

Solusi yang sangat sederhana yang saya gunakan adalah: Halaman yang mencantumkan jenis posting kustom disebut dalam bentuk jamak (mis. Produk) dan nama jenis posting yang sebenarnya adalah dalam bentuk tunggal (mis. Produk). Jadi mereka tidak konflik dan semua baik-baik saja.

Selesai! Semoga ini bisa menghemat waktu orang.

Dave
sumber
6
Saya kira, bukan hanya pos khusus, Anda tidak dapat memiliki pos dan halaman dengan nama yang sama juga.
Rutwick Gangurde
4

Setelah sekian lama saya menemukan solusi untuk masalah ini (terima kasih kepada franzblog ).

Jika Anda menggunakan versi 4.2 atau lebih tinggi, Anda perlu menambahkan baris berikut di functions.phpfile Anda :

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; 
}

Semuanya bekerja dengan baik sekarang!

Dneiz
sumber
1

Anda TIDAK BISA memiliki HALAMAN dan JENIS POS KUSTOM dengan nama yang sama

Mungkin pohon tahun lalu itu tidak mungkin, tetapi sekarang Anda BISA.

Pertama, tambahkan baris ini ke $argsdalam jenis posting Anda:

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

Kedua, functions.phptambahkan aksi:

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);
}

Jangan lupa untuk menyiram aturan di dasbor.

ruorc
sumber