หลังจากรวมคำตอบอื่น ๆ เข้าด้วยกันฉันก็ทำงานได้! ดังนั้นนี่คือทางออกสำหรับผู้ที่ดิ้นรนกับเรื่องนี้เช่นกัน:
โพสต์นี้และอันนี้ช่วยฉันออกมาบ้างขอบคุณคนเหล่านั้น
หมายเหตุรหัสทั้งหมดนี้รวมถึงประเภทโพสต์ที่กำหนดเองเริ่มต้นและรหัสการลงทะเบียน taxonomy จะอยู่ในfunctions.php
ไฟล์ของคุณ
ครั้งแรกที่ได้รับกระสุนของคุณได้เมื่อกำหนดประเภทโพสต์ของคุณเองและ taxonomies: สำหรับโพสต์ที่กำหนดเองประเภทที่ควรจะเป็นและกระสุนสำหรับอนุกรมวิธานของคุณควรจะเป็นเพียงแค่basename/%taxonomy_name%
basename
อย่าลืมเพิ่ม'hierarchical' => true
ไปยังอาเรย์อนุกรมวิธานเขียนซ้ำเพื่อรับคำซ้อนใน URL ของคุณ ตรวจสอบให้แน่ใจว่าquery_var
ได้ตั้งค่าเป็นtrue
ทั้งสองกรณี
คุณต้องเพิ่มกฎการเขียนใหม่เพื่อให้ WordPress รู้วิธีตีความโครงสร้าง URL ของคุณ ในกรณีของฉันส่วนโพสต์ที่กำหนดเองของ uri จะเป็นเซ็กเมนต์ uri ที่ 5 เสมอดังนั้นฉันจึงกำหนดกฎการจับคู่ให้เหมาะสม โปรดทราบว่าคุณอาจต้องเปลี่ยนสิ่งนี้หากคุณใช้กลุ่ม uri มากขึ้นหรือน้อยลง หากคุณมีคำซ้อนหลายระดับคุณจะต้องเขียนฟังก์ชั่นเพื่อตรวจสอบว่าส่วน uri สุดท้ายคือประเภทโพสต์ที่กำหนดเองหรือคำศัพท์อนุกรมวิธานเพื่อทราบกฎที่จะเพิ่ม (ถามฉันว่าคุณต้องการความช่วยเหลือหรือไม่ ที่).
add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
$newRules = array();
$newRules['basename/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment
$newRules['basename/(.+)/?$'] = 'index.php?taxonomy_name=$matches[1]';
return array_merge($newRules, $rules);
}
จากนั้นคุณต้องเพิ่มรหัสนี้เพื่อให้ workpress วิธีจัดการกับ%taxonomy_name%
โครงสร้างโพสต์ชนิดเขียนทับแบบกำหนดเองของคุณ:
function filter_post_type_link($link, $post)
{
if ($post->post_type != 'custom_post_type_name')
return $link;
if ($cats = get_the_terms($post->ID, 'taxonomy_name'))
{
$link = str_replace('%taxonomy_name%', get_taxonomy_parents(array_pop($cats)->term_id, 'taxonomy_name', false, '/', true), $link); // see custom function defined below
}
return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);
ฉันสร้างฟังก์ชั่นที่กำหนดเองตาม Wordpress เองget_category_parents
:
// my own function to do what get_category_parents does for other taxonomies
function get_taxonomy_parents($id, $taxonomy, $link = false, $separator = '/', $nicename = false, $visited = array()) {
$chain = '';
$parent = &get_term($id, $taxonomy);
if (is_wp_error($parent)) {
return $parent;
}
if ($nicename)
$name = $parent -> slug;
else
$name = $parent -> name;
if ($parent -> parent && ($parent -> parent != $parent -> term_id) && !in_array($parent -> parent, $visited)) {
$visited[] = $parent -> parent;
$chain .= get_taxonomy_parents($parent -> parent, $taxonomy, $link, $separator, $nicename, $visited);
}
if ($link) {
// nothing, can't get this working :(
} else
$chain .= $name . $separator;
return $chain;
}
จากนั้นคุณต้องล้างข้อมูลลิงก์ (เพียงโหลดหน้าการตั้งค่าลิงก์ถาวร)
ตอนนี้ทุกอย่าง 'ควร' ทำงานหวังว่า! ไปทำกลุ่มคำศัพท์อนุกรมวิธานและเรียงซ้อนอย่างถูกต้องจากนั้นสร้างโพสต์ประเภทโพสต์ที่กำหนดเองแล้วจัดหมวดหมู่ให้ถูกต้อง คุณยังสามารถสร้างหน้าด้วยกระสุนbasename
และทุกอย่างควรทำงานตามที่ฉันระบุในคำถามของฉัน คุณอาจต้องการสร้างหน้าที่เก็บถาวร taxonomy ที่กำหนดเองเพื่อควบคุมวิธีที่พวกเขาค้นหาและเพิ่มปลั๊กอินวิดเจ็ต taxonomyบางชนิดเพื่อแสดงหมวดหมู่ที่ซ้อนกันของคุณในแถบด้านข้าง
หวังว่าจะช่วยคุณ!