ทำไม“ / หน้า / 2 /” ไม่ทำงาน


11

ในที่สุดก็มีเลขหน้าให้ทำงานกับรหัสด้านล่าง แต่ตอนนี้การเชื่อมโยงเลขหน้ากับ / วิดีโอ / หน้า / 2 / ซึ่งไม่มีอยู่ ฉันจะทำให้หน้า 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();
 ?>

ฉันจะไม่แนะนำให้แทนที่คำค้นหาหลักเช่นนั้นคุณเคยลองใช้pre_get_postsไหม? จากนั้นคุณสามารถใช้โค้ดเพจในตัวแทนการเขียนของคุณเองและคุณสามารถทำให้โพสต์มาตรฐานวนซ้ำได้ง่ายขึ้น
Tom J Nowell

นอกจากนี้ WordPress ยังมีหน้าเก็บถาวรมาตรฐานสำหรับประเภทโพสต์ดังนั้นคุณควรมีคลังโพสต์ที่/videos/จะโหลดarchive-videos.phpซึ่งไม่ต้องยุ่งกับการสืบค้น
Tom J Nowell

คำตอบ:


15

พบคำตอบ:

หลังจากวันที่ looong ทำการดีบักผ่าน wordpress core ฉันสามารถแก้ไขปัญหานี้ได้

โดยทั่วไปคุณต้องมี PAGE และ PAGE POST TYPE ที่มีชื่อเดียวกัน หากคุณทำเช่นนั้นกฎการเขียนลิงก์ใหม่จะทำให้สับสนและทริกเกอร์ 404

วิธีแก้ปัญหาที่ง่ายมากที่ฉันใช้คือ: หน้าเว็บที่แสดงประเภทโพสต์ที่กำหนดเองเรียกว่าเป็นพหูพจน์ (เช่นผลิตภัณฑ์) และชื่อประเภทโพสต์จริงเป็นแบบเอกพจน์ (เช่นผลิตภัณฑ์) ดังนั้นพวกเขาจึงไม่ขัดแย้งและก็ไม่เป็นไร

เสร็จแล้ว! หวังว่านี่จะช่วยประหยัดเวลาของผู้คน


6
ฉันเดาว่าไม่ใช่เฉพาะโพสต์ที่กำหนดเองคุณไม่สามารถมีโพสต์และเพจที่มีชื่อเดียวกันได้
Rutwick Gangurde

4

หลังจากผ่านไปนานฉันพบวิธีแก้ปัญหาสำหรับปัญหานี้ (ขอบคุณfranzblog )

หากคุณใช้เวอร์ชั่น 4.2 หรือสูงกว่าคุณจะต้องเพิ่มบรรทัดต่อไปนี้ใน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; 
}

ตอนนี้ทุกอย่างทำงานได้ดี!


1

คุณ CANT มี PAGE และ CUSTOM POST TYPE ที่มีชื่อเดียวกัน

อาจเป็นต้นไม้เมื่อหลายปีก่อนมันเป็นไปไม่ได้ แต่ตอนนี้คุณทำได้

ก่อนอื่นให้เพิ่มบรรทัดนี้$argsลงในประเภทโพสต์ของคุณ:

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

ประการที่สองในfunctions.phpการดำเนินการเพิ่ม:

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

อย่าลืมล้างกฎในแดชบอร์ด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.