แก้ไขชื่อโพสต์ที่กำหนดเองเมื่อเทียบกับหน้าความขัดแย้งลิงก์ (ทับเหมือนกัน)


19

ฉันมีประเภทโพสต์ที่กำหนดเองที่เรียกว่า "visningshus" และยังเป็นหน้าเว็บที่มีกระสุน นี่คือตามที่ควร (ต้อง) เป็น

ขณะนี้ " http://my-site.com/visningshus " แสดงรายการโพสต์ทั้งหมดของประเภทนั้น ฉันต้องการแสดงหน้าเว็บที่มีแท่ง Permalink แทน

ฉันจะทำให้ Wordpress ไม่ทำให้ชื่อประเภทการโพสต์มีความสำคัญกว่าได้ แต่เป็นการแสดงความคิดเห็นและแสดงหน้า?

คำตอบ:


33

วิธีที่ง่ายที่สุดคือเพียงปิดการใช้งานหน้าเก็บถาวรสำหรับ CPT นี้:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

อย่าลืมรีเฟรช Permalink ของคุณหลังจากนั้นที่"การตั้งค่า> Permalinks"


1
ทำงานได้อย่างสมบูรณ์ - แต่ตอนนี้ลิงก์ทั้งหมดเริ่มต้นด้วยชื่อประเภทโพสต์ที่กำหนดเองให้ 404 แม้ว่าพวกเขาจะถูกต้องใน wp-admin และดูเหมือนว่าจะไม่มีการเขียนซ้ำ กล่าวคือลิงก์ทั้งหมดถูกต้องในเว็บไซต์ แต่โพสต์ที่กำหนดเองทั้งหมดให้ 404 คุณสามารถช่วยได้ไหม :)
Henrik Erlandsson

@HenrikErlandsson ประเภทการโพสต์ของคุณอาจมีชื่อเหมือนกัน ในกรณีนี้ฉันแนะนำให้คุณเปลี่ยนชื่อโพสต์ ตัวอย่าง: ชื่อประเภทโพสต์ที่กำหนดเอง - ก่อน: ผลิตภัณฑ์หลังจาก: cpt_products
Bruno Monteiro

ฉลาดมาก ๆ. แก้ปัญหาจำนวนมาก
bysanchy

8

ฉันชื่อเสียงไม่สูงพอที่จะแสดงความคิดเห็นในโพสต์ของ @ Carl แต่เขาเป็นคำตอบที่ถูกต้อง (อย่างน้อยกับสถานการณ์นี้ในการรักษาหน้ากระสุนและประเภทโพสต์ที่กำหนดเองกระสุนเหมือนกันและไม่ได้ใช้ไฟล์ archive.php)

แต่คำตอบของเขาจะให้ข้อผิดพลาดกับเลขหน้า วิธีหลีกเลี่ยงข้อผิดพลาดในการแบ่งหน้า:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

สิ่งนี้จะดูที่การแบ่งหน้าคว้าหมายเลขหน้าแล้วที่ด้านพลิกบังคับให้ใช้หน้าเว็บที่มีตัวบุ้งที่ตรงกันแล้วแทรกตัวแปรหน้า

นี้นอกเหนือจากการ'has_archive' => false,โพสต์ข้างต้นควรบรรลุการทำงานที่ต้องการ

ตามที่คนอื่นระบุให้แน่ใจว่าได้ล้างกฎการเขียนซ้ำโดยไปที่การตั้งค่า> Permalinks หลังจากทำการเปลี่ยนแปลงนี้

หวังว่าสิ่งนี้จะช่วยให้ใครบางคนเพราะฉันรู้ว่าสิ่งนี้ทำให้ฉันตกใจเป็นเวลานานจริงๆ


4

Tjena Henrik!

ฉันคิดว่าสิ่งที่คุณต้องทำคือการเพิ่มกฎการเขียนซ้ำลงในกฎการเขียนซ้ำ Wordpress ที่ได้สร้างขึ้นแล้ว เพิ่มส่วนย่อยของรหัสนี้ในฟังก์ชั่นของคุณ .php ของชุดรูปแบบของคุณหรือรวมเป็นส่วนแยก ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);

4
หากใครใช้สิ่งนี้เอาออกflush_rewrite_rules();คุณไม่ควรเปลี่ยนกฎการเขียนinitซ้ำทุกครั้ง โหลดอีกครั้งจากนั้นลบออกหรือล้างลิงก์ถาวรด้วยตนเองโดยไปที่การตั้งค่าลิงก์ถาวรในแผงควบคุมของผู้ดูแลระบบและคลิก "บันทึกการเปลี่ยนแปลง"
tehlivi

0

ฉันแก้ไขได้โดยไม่ต้องแก้ไขข้อขัดแย้ง สร้างหน้าเว็บที่มีตัวบุ้งบุ้งและเขียนสิ่งที่คุณต้องการ จดบันทึก ID ของหน้านี้

สร้างและปรับแต่งเทมเพลตเก็บถาวรที่กำหนดเองโพสต์ type.php ในสิ่งที่คุณต้องการ (ส่วนใหญ่คุณจะใช้เทมเพลตหน้า) แต่แทนที่ส่วนวงด้วย

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

จากนั้นเมื่อคุณไปที่http://my-site.com/visningshusคุณจะเห็นเนื้อหาที่จัดการโดยหน้าเว็บที่ URL ที่ถูกต้อง

ให้ฉันรู้ว่ามันใช้งานได้


เป็นความคิดที่ดี แต่มันซับซ้อนเกินไป คุณลองวิธีการแก้ปัญหาของฉันได้อย่างไร
Kraftner

@kraftner ไม่ฉันไม่ได้ทำ ฉันจะลองอีกครั้ง ขอบคุณ!
molokom

นอกจากนี้ยังมีผลข้างเคียงบางอย่างเช่นส่วนหัวและทุกอย่างยังคงถูกสร้างราวกับว่ามันเป็นหน้าเก็บถาวรและไม่ใช่หน้า ฉันไม่แนะนำให้ใช้วิธีแก้ปัญหานั้น
Kraftner

จะเกิดอะไรขึ้นถ้ารหัสเพจเปลี่ยน? สิ่งนี้ไม่ปลอดภัย
โจเอลเจมส์

0

ไม่ได้รับอนุญาตให้ลงคะแนน แต่ + สำหรับโซลูชัน Carls register_post_type ควรมี

'has_archive' => false

ง่าย อย่างไรก็ตามเมื่อคุณประสบปัญหาเรื่องเลขหน้าให้ดูที่

add_rewrite_rule

0

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


0

นี่คือโซลูชันทั่วไปในการจัดลำดับความสำคัญการแบ่งหน้าเนื้อหาประเภทโพสต์ที่กำหนดเองสำหรับกระสุนชนิดโพสต์ที่กำหนดเองใด ๆ

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

นอกจากการเพิ่มตัวอย่างนี้คุณควรตรวจสอบให้แน่ใจว่าประเภทโพสต์ที่คุณกำหนดเองนั้นมี archive = false

และสุดท้าย แต่ไม่ท้ายสุดไปที่หน้าการตั้งค่า Permalinks การตั้งค่า> Permalinks (/wp/wp-admin/options-permalink.php) และบันทึกการตั้งค่าปัจจุบันเพื่อรีเฟรชโครงสร้างลิงก์ในหน้า

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