สิ่งนี้ไม่ควรง่ายใช่ไหม! โพสต์ที่กำหนดเองประเภท / อนุกรมวิธานอนุกรมวิธานที่กำหนดเอง


11

ดังนั้นนี่คือการขับรถฉันบ้าอย่างแน่นอน ฉันใช้เวลาหลายวันในการพยายามแก้ไขปัญหานี้และฉันก็ไม่สามารถบอกได้ว่าทำไมเรื่องนี้ถึงยากเหลือเกินเพราะนี่เป็นโครงสร้างความคิดเห็นทั่วไป!

ฉันค้นหาคำตอบและโพสต์นับร้อยและดูเหมือนว่าไม่มีใครแก้ปัญหาได้

ฉันต้องการโครงสร้างนี้เพียง:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

ดังนั้นฉันบรรลุดังต่อไปนี้:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

ทุกครั้งที่ฉันลองทำสิ่งที่ฉันได้รับ 404 ข้อผิดพลาดหรือการกระตุ้นไม่ทำงาน

ฉันไม่เข้าใจว่าทำไมมันถึงยากขนาดนี้!

ความช่วยเหลือใด ๆ ที่ชื่นชมจริงๆ!

ขอขอบคุณ

================================================== ==== ================== ข้อมูลเพิ่มเติม ==================

ขณะนี้ฉันกำลังลงทะเบียนประเภทโพสต์และอนุกรมวิธานดังนี้:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

หากฉันลงทะเบียนทั้งสองเป็น 'วรรณกรรม' ฉันจะได้รับ 404 ในหน้า mysite.com/literature แต่สิ่งนี้จะแสดงความคิดเห็นของฉันเป็น: mysite.com/literature/books/mybook

หลังจากทำตามคำแนะนำสำหรับคำถามนี้ - ประเภทโพสต์ที่กำหนดเอง, taxonomies และ Permalinks

ฉันได้เพิ่มสิ่งนี้ไปยังฟังก์ชั่นของฉัน:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

และเปลี่ยนประเภทโพสต์ของฉันเป็น'slug' => 'literature/%literature_category%' และเปลี่ยนอนุกรมวิธานของฉันเป็น'slug' => 'literature'

ใช้งานได้ดียกเว้นว่าการให้mysite.com/literatureเลขหน้าไม่ได้ผลดังนั้นฉันจึงได้รับข้อผิดพลาด 404 ใน URL ต่อไปนี้:

mysite.com/literature/page/2/


จากความอยากรู้คุณพยายามทำอะไรจนถึงตอนนี้?
Matthew Boynes

คำตอบนี้ทำให้ฉันใกล้เคียงที่สุด - wordpress.stackexchange.com/questions/5308/ … - แต่แล้วมันก็ไม่ได้ทำงานกับการแบ่งหน้าและปลั๊กอินที่แนะนำไม่ทำงาน
fxfuture

เจ๋งดีใจที่ฉันถามว่าช่วยฉันในบางเวลา!
Matthew Boynes

คำตอบ:


6

ทำตามคำแนะนำสำหรับคำถามนี้ตามที่คุณทำไปแล้ว แต่เพิ่มไปยังรหัสของคุณ:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

สุดท้ายไปที่การตั้งค่า> ลิงก์และกดบันทึก หากยังใช้งานไม่ได้ให้บันทึกลิงก์ถาวรอีกครั้ง บางครั้งฉันรู้สึกว่าคุณต้องช่วยพวกเขาสองครั้ง แต่ใครจะรู้ อย่างไรก็ตามแจ้งให้เราทราบว่าคุณทำออกมาได้อย่างไร โปรดทราบว่าคำตอบมาตรฐานวิทยาศาสตร์คอมพิวเตอร์ # 1 นำไปใช้: ได้ผลกับฉัน ... ;-)

จากดินแดนแห่ง TMI ...

สำหรับการอ้างอิงเหตุผลที่ว่าทำไมหน้าจะไม่ได้ทำงานตามค่าเริ่มต้นคือการที่ทำให้ WordPress ในเขียนกฎวรรณกรรม /% literature_category% /% หนังสือ% /% หน้า% ซึ่งจะทำให้ความรู้สึกทั้งหมดถ้าคุณคิดเกี่ยวกับมัน ดังนั้นลิงก์ถาวรเริ่มต้นของคุณจึงมีกฎการแข่งขันตามลำดับนี้:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

สิ่งที่เราทำจริง ๆ ที่นี่คือการเปลี่ยนลำดับของสิ่งเหล่านี้โดยยกเลิกการตั้งค่าหลัง (เราสามารถเก็บไว้ใน แต่แล้วทุก rewrite หลังจากนั้นมี regex อีกหนึ่งที่จะทำงานในการโหลดหน้า) และเพิ่มไปยังจุดเริ่มต้นของอาร์เรย์

ข้อเท็จจริงที่สนุกสนาน:หากคุณมี "หนังสือ" ที่มีสิทธิ์ "หน้า" และมีหลายหน้าคำสั่งนี้จะขัดแย้งกันและหน้าต่อไปจะไม่ทำงาน!


เอ้ยมันเพิ่งเกิดขึ้นกับฉันว่าไวยากรณ์ของฉันผิดที่นี่ ตลกดีมันใช้งานได้สำหรับฉันและเมื่อฉันแก้ไขมันไม่ทำงาน ฉันจะเก็บมันไว้และอัปเดตคำตอบของฉันเมื่อฉันคิดออก ...
Matthew Boynes

ขอบคุณสำหรับความช่วยเหลือของคุณแมทธิว ฉันลองมันและน่าเสียดายที่มันไม่ทำงาน ฉันได้เพิ่มข้อมูลเพิ่มเติมลงในคำถามซึ่งหวังว่าจะอธิบายได้ดีขึ้น!
fxfuture

1
โอเคฉันขอโทษสำหรับความสับสน มีแก๊สสมองนิดหน่อยที่นั่น (ต้องมีถั่วสมองสักอันแล้ว) คำตอบของฉันได้รับการอัปเดตแล้วและใช้ได้อีกครั้งสำหรับฉัน จำไว้ว่าให้บันทึกทับลิงก์ถาวรของคุณ
Matthew Boynes

1
โอเคฉันเห็นคำถามที่อัปเดตของคุณแล้ว ดังนั้นมันจึงไม่ใช่ว่า / วรรณกรรม / นิยาย / หน้า / 2 ไม่ทำงานมัน / วรรณกรรม / หน้า / 2 ไม่ทำงานใช่ไหม? ถ้าเป็นเช่นนั้นนั่นเป็นการแก้ไขที่ง่ายเราจะทำสิ่งเดียวกันในระดับเดียวกัน
Matthew Boynes

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