วิธีการเปลี่ยนโครงสร้างลิงก์ถาวรสำหรับประเภทโพสต์ที่กำหนดเองและเป็น taxonomies?


11

นี่คือการโพสต์คำถามก่อนหน้านี้อีกครั้ง แต่ฉันต้องการที่จะลงรายละเอียดเพิ่มเติมตอนนี้เพื่อที่จะสามารถแก้ไขปัญหานี้ได้

ดังนั้นอีกด้วย (ปกติ) โพสต์การเปลี่ยนแปลงความคิดเห็นเป็นเรื่องง่ายเป็นไปที่ Settings> Permalink %category%/%postname%.htmlและเปลี่ยนมันเป็นสิ่งที่คุณชอบเช่นใช้กันอย่างแพร่หลาย ทั้งหมดนี้ใช้งานได้ หากนี่เป็นเรื่องง่ายสำหรับประเภทโพสต์ที่กำหนดเองและเป็น taxonomies เช่นกัน

นี่คือสิ่งที่ฉันชอบที่จะทำให้สำเร็จ

  1. http://mywordpress.com/portfolio.html - แสดงโพสต์ทั้งหมดในทุกหมวดหมู่
  2. http://mywordpress.com/portfolio/music/ - แสดงโพสต์ทั้งหมดในหมวดนี้
  3. http://mywordpress.com/portfolio/music/trance/ - แสดงโพสต์ทั้งหมดในหมวดหมู่ (เด็ก) นี้
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - แสดงโพสต์

สิ่งที่ฉันได้มาคือ:

  1. ครั้งแรกที่ฉันสร้างcustom_post_typeชื่อโครงการและproject_categorytaxonomy
  2. ฉันสร้างพอร์ตโฟลิโอของหน้าและให้เทมเพลทของเพจที่จะแสดงรายการpost_type = projectโพสต์ทั้งหมด ฉันจะเพิ่ม. html ลงในลิงก์ของหน้าได้อย่างไร ตอนนี้มันเชื่อมโยงไปยังhttp://mywordpress.com/portfolioในขณะที่ฉันต้องการhttp://mywordpress.com/portfolio.html สิ่งนี้ควรแก้ไขปัญหาแรก
  3. จากนั้นสิ่งต่าง ๆ จะยากขึ้นเพราะเราไม่ทราบล่วงหน้าว่ามีหมวดหมู่ย่อยจำนวนเท่าไรบางทีอาจจะไม่มีเลยด้วยซ้ำ portfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.htmlดังนั้นโครงสร้างที่เรามีอยู่หลังจากที่เป็น ฉันยังคงติดอยู่ที่จุดนี้ ฉันคิดว่าฉันควรเพิ่มหมวดหมู่สุดท้ายในพา ธ และส่งผ่านไปตามproject_categoryซึ่งควรนำไปสู่ไฟล์ taxonomy.php ที่ฉันสามารถประมวลผลได้อย่างถูกต้อง
  4. ฉันไม่ได้จัดการกับเรื่องนี้ แต่มันควรจะมีอะไรเกี่ยวข้องกับ%postname%.htmlตอนท้ายของบางสิ่งบางอย่าง

ฉันหวังว่าปัญหาของฉันจะชัดเจนและมีผู้พัฒนาที่กล้าหาญซึ่งจะช่วยฉันจัดการกับปัญหานี้ซึ่งทำให้ฉันยุ่งอยู่สี่วันเต็มแล้ว!


1
คำตอบที่ฉันให้ไว้ในคำถามสุดท้ายน่าจะเป็นไปได้ถ้าคุณใช้อย่างถูกต้อง สิ่งเดียวคือคุณไม่สามารถรับส่วน html ได้
Manny Fleurmond

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

หรือฉันไม่ได้ใช้อย่างถูกต้อง;)
ทำเครื่องหมาย

คำตอบ:


4

ตกลงฉันคิดว่าฉันอาจมีทางออก ฉันไม่รู้ว่านี่เป็นวิธีที่เหมาะสมในการทำสิ่งนี้ให้สำเร็จหรือไม่ แต่สำหรับตอนนี้มันเป็นสิ่งเดียวที่ดูเหมือนจะใช้ได้

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}

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

1

2 วิธีการที่แตกต่าง:

* ดูหมายเหตุที่ด้านล่างของโพสต์นี้


ตัวอย่างเช่นคุณต้องการมีโครงสร้างลิงก์ดังกล่าว:
/ MAIN_CATEGORY / SUB_CAT_2 / Another_SUBCAT / my-post

ตอนแรกคุณอาจจะต้องตั้ง Permalinks ไป/ หมวดหมู่% /% postname%% จากนั้น ...




วิธีที่ 1:

สร้างประเภท STANDARD ( MAIN_CATEGORY, SUB_CAT_1, and etc..) และลงทะเบียน CUSTOM POST รวมทั้งพารามิเตอร์นี้:

'taxonomies'    => array('category'..)

และใช้รหัสนี้เพื่อเปลี่ยน Permalinks: https://wordpress.stackexchange.com/a/195643/33667
จากนั้นหลังจากเผยแพร่ CUSTOM POST (หากแนบอยู่ในหมวดหมู่) URL จะเป็น:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



วิธีที่ 2:

(ps ไม่แนะนำวิธีนี้หากคุณวางแผนที่จะเผยแพร่โพสต์หลายร้อยหรือหลายพันรายการ)

ลงทะเบียน CUSTOM POST (ชื่อMAIN_CATEGORY) รวมถึงพารามิเตอร์เหล่านี้:

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

จากนั้นเผยแพร่โพสต์ที่กำหนดเองเช่นนี้: (เช่นเผยแพร่โพสต์ที่กำหนดเองหลายชื่อหลังจากนั้นเมื่อคุณเผยแพร่โพสต์อื่น แต่เลือกเป็นผู้ปกครอง
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1) ถ้าคุณเป็นมือใหม่รีวิว: ลงทะเบียน CUSTOM POSTและ ลงทะเบียน CUSTOM POST กับ TAXONOMY
2) ถ้าคุณต้องการฟังก์ชั่นการค้นหาระดับย่อยจากนั้นใช้คำค้นหาที่กำหนดเอง


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