การเขียน URL ประเภทโพสต์ที่กำหนดเอง?


32

ฉันตั้งค่าประเภทโพสต์ที่กำหนดเองสำหรับโครงการผลงานของฉัน URL หลักของสิ่งนี้อยู่ที่/projects/

ตอนนี้ฉันยังตั้งค่าการโพสต์บล็อกของฉัน Permalink /articles/*/เป็นโครงสร้าง Permalink ซึ่งหมายความว่าเมื่อฉันไปดูโครงการพอร์ตโฟลิโอเปลี่ยน URL/articles/projects/project-name/

ฉันรู้ว่าต้องมีวิธีที่จะเขียน Permalinks เฉพาะสำหรับโครงการของฉันประเภทโพสต์ที่กำหนดเอง แต่ฉันไม่คุ้นเคยกับไวยากรณ์ในการประกาศทาก URL - จะขอบคุณความช่วยเหลือที่ฉันได้รับ!

คำตอบ:


42

เมื่อคุณลงทะเบียนประเภทโพสต์ที่กำหนดเองคุณจะต้องระบุว่ากฎการเขียนใหม่ไม่ควรเสริมด้วยโครงสร้าง URL ที่มีอยู่

กล่าวโดยย่อคือสายนี้ในสายของคุณregister_post_type:

'rewrite' => array('slug' => 'projects'),

ควรเปลี่ยนเป็นสิ่งนี้:

'rewrite' => array('slug' => 'projects','with_front' => false),

สำหรับข้อมูลเพิ่มเติมตรวจสอบrewriteอาร์กิวเมนต์จากรายการ codex onregister_post_type

แก้ไข: ตรวจสอบให้แน่ใจว่าหลังจากอัปเดตรหัสแล้วคุณจะต้องล้างกฎการเขียนซ้ำโดยไปที่การตั้งค่า> Permalinks มิฉะนั้นคุณจะยังเห็นลิงก์เดิมอยู่


ยอดเยี่ยมขอบคุณ! เพียงเพื่อชี้แจงสิ่งที่ฉันต้องทำเพื่อล้างกฎคือไปที่หน้าการตั้งค่า -> ลิงก์ถาวรและกด "บันทึกการเปลี่ยนแปลง" ถูกต้องหรือไม่
Jake

4
คุณไม่จำเป็นต้องบันทึกการเปลี่ยนแปลงด้วยซ้ำ ก็พอที่จะเปิดหน้าการตั้งค่าลิงก์ถาวร (นั่นคือถ้าไฟล์. htaccess ของคุณเขียนได้ถ้าไม่ให้กดบันทึกการเปลี่ยนแปลงและคัดลอกรหัสด้วยตนเองจะส่งคืนใน. htaccess ของคุณ)
0x61696f

2
ดูเหมือนจะไม่ได้ผลสำหรับฉัน example.com/projects/title-of-postโพสต์โครงการของฉันยังจะ ฉันไปที่หน้า Permalinks ด้วย สิ่งใดที่ทำให้เกิดสิ่งนี้ ไม่มีกฎการเขียนhtaccessซ้ำในฉัน
Desi

ว้าวขอบคุณที่เป็นส่วนที่ขาดไป! การเยี่ยมชมหน้า Permalink ไม่ทำงาน แต่เพียงแค่ประหยัดการตั้งค่าลิงก์ถาวรปัจจุบันทำงาน :)
Alexander Taubenkorb

ฉันยังคงเปลี่ยนแปลงสิ่งต่าง ๆ โดยไม่ต้องล้างกฎการเขียนซ้ำ ขอบคุณสำหรับทิป!
Tan-007

15

ฉันมีปัญหานี้อย่างแท้จริง 3 วันที่ผ่านมาแล้วผมเจอชุดมากกว่าที่wp.tutsplus.com ฉันสลับรหัสของตัวเองออกมาเพื่อตอบคำถามของคุณได้ดีขึ้น แต่นี่คือสิ่งที่ฉันได้รับหลังจากจบซีรีส์ นอกจากนี้โปรดทราบว่านี่ยังไม่ได้ทดสอบ

// sets custom post type
function my_custom_post_type() {
    register_post_type('Projects', array(   
       'label' => 'Projects','description' => '',
       'public' => true,
       'show_ui' => true,
       'show_in_menu' => true,
       'capability_type' => 'post',
       'hierarchical' => false,
       'publicly_queryable' => true,
       'rewrite' => false,
       'query_var' => true,
       'has_archive' => true,
       'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes'),
       'taxonomies' => array('category','post_tag'),
       // there are a lot more available arguments, but the above is plenty for now
    ));
}

add_action('init', 'my_custom_post_type');

// rewrites custom post type name
global $wp_rewrite;
$projects_structure = '/projects/%year%/%monthnum%/%day%/%projects%/';
$wp_rewrite->add_rewrite_tag("%projects%", '([^/]+)', "project=");
$wp_rewrite->add_permastruct('projects', $projects_structure, false);

ในทางทฤษฎีคุณสามารถสลับสิ่งที่คุณต้องการใน URL ที่เก็บไว้ใน$projects_structureตัวแปรสิ่งที่มีเพียงสิ่งที่ฉันใช้

ขอให้โชคดีและเช่นเคย - อย่าลืมกลับมาอีกครั้งและแจ้งให้เราทราบว่ามันทำงานอย่างไร! :)


1
คำตอบที่ประกอบด้วยการเชื่อมโยงโดยทั่วไปถือว่าไม่มีประโยชน์เนื่องจากทรัพยากรเหล่านั้นสามารถ (และอาจจะ) ยุติการมีอยู่ในอนาคต สรุปเนื้อหา
chrisguitarguy

ยุติธรรมพอฉันจะแก้ไขให้ถูกต้อง
cmegown

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