ยกเลิกการลงทะเบียนประเภทโพสต์ที่กำหนดเอง


44

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

มีให้เทียบเท่าregister_post_type()?


1
หนึ่งในการค้นหานี้ เมื่อคุณลงทะเบียนประเภทโพสต์ที่กำหนดเองไม่มีอะไรถูกบันทึกลงในฐานข้อมูล ตารางโพสต์ใน wp db ไม่มีโครงสร้าง มันเป็นเพียงการลงทะเบียนกับภายในของสคริปต์ wp ที่คุณสามารถสร้างรายการลงในตารางโพสต์ด้วยประเภทของสิ่งที่คุณเคยสร้างด้วยโพสต์ลงทะเบียน หวังว่าจะช่วยคนอื่น
MageProspero

2
ในฐานะของ WordPress 4.5 unregister_post_typeมีฟังก์ชั่นที่จะทำ ดูยกเลิกการลงทะเบียนประเภทโพสต์โดยใช้ unregister_post_type
Dhinju Divakaran

คำตอบ:


38

ขณะนี้ไม่มีฟังก์ชั่นสำหรับยกเลิกการลงทะเบียนประเภทโพสต์กระบวนการนี้ค่อนข้างง่าย

Andrew Nacin ได้ให้รหัสบางส่วนบน trac พบได้ที่นี่และโพสต์ด้านล่าง

if ( ! function_exists( 'unregister_post_type' ) ) :
function unregister_post_type( $post_type ) {
    global $wp_post_types;
    if ( isset( $wp_post_types[ $post_type ] ) ) {
        unset( $wp_post_types[ $post_type ] );
        return true;
    }
    return false;
}
endif;

การยกเลิกการลงทะเบียนประเภทโพสต์ในตัวจะมีผลกระทบที่ไม่รู้จักกับ WordPress ดังนั้นโปรดรับความเสี่ยงด้วยตนเอง การยกเลิกการลงทะเบียนประเภทโพสต์ที่กำหนดเองควรจะปลอดภัยอย่างสมบูรณ์แบบ แต่โดยปกติแล้วจะไม่มีการล้างข้อมูลบนการติดตั้งของคุณ (เช่นการที่ไม่ได้ลงทะเบียนประเภทโพสต์จะไม่เท่ากับการลบข้อมูลออกจากฐานข้อมูล)

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


2
ไม่เป็นไร .. :) หากคุณเพิ่มประเภทโพสต์ของคุณเองในรูปแบบของรหัสทางออกที่ง่ายกว่าคือการลบฟังก์ชั่น / รหัสที่คุณเรียกใช้ซึ่งเพิ่มเข้าไป นอกจากนี้โปรดทราบว่าการลบประเภทโพสต์ไม่ได้ลบออกจากตารางโพสต์ของคุณดังนั้นคุณอาจมีรายการซ้ำซ้อนในตารางนั้น
t31os

2
@anu: สิ่งเดียวที่ยังคง "ถาวร" หากคุณไม่ได้ดำเนินการregister_post_type()ในแต่ละหน้าโหลด ( init) อาจเป็นโครงสร้าง permalink (รีเฟรชมันและมันจะหายไป) และโพสต์ในฐานข้อมูลซึ่งคุณสามารถลบ DELETE FROM wp_posts WHERE post_type = '[your custom post type]'โดยการทำ
Jan Fabry

น่าสนใจฉันลบรหัส register_post_type สำหรับ custom_post_type นั้นและฉันไม่ได้เพิ่มโพสต์ใด ๆ ใน cpt นั้น แต่มันไม่ได้ลบ UI ของผู้ดูแลระบบ
anu

หรือตอนนี้ฉันลองอีกครั้งมันใช้งานได้ตามที่คุณอธิบาย - นั่นคือ UI ของผู้ดูแลระบบสำหรับ cpt ใหม่หายไปแล้ว อาจเป็นฉัน muppet :) ข้อมูลที่มีประโยชน์อยู่แล้วขอบคุณ
anu

3
อัปเดตในเดือนกุมภาพันธ์ 2559 - ฟังก์ชั่นนี้รวมอยู่ในแกนสำหรับ WP 4.5.0 (จะเปิดในเดือนเมษายน)
Ricardo BRGWeb

37

ในฐานะของ WordPress 4.5 มีฟังก์ชั่นการทำเช่นนั้น, unregister_post_type. ตัวอย่าง:-

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');

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

@Dhinju Divakaran มันไม่ได้ลบประเภทการโพสต์เก่าจากฐานข้อมูลที่ฉันไม่ได้ใช้ตอนนี้
Faiyaz Alam

การทำงานตรวจสอบให้แน่ใจว่าคุณให้ความสำคัญสูงกับการกระทำนี้เปรียบเทียบกับการกระทำที่ใช้ในการลงทะเบียนประเภทโพสต์
Ajith R Nair

1
เป็นมูลค่าการกล่าวขวัญที่unregister_post_type()ไม่ลบอะไรจากฐานข้อมูล แต่จะป้องกันไม่ให้โพสต์ประเภทลงทะเบียน
Dave Romsey

สิ่งนี้ใช้งานได้ดีสำหรับฉัน แต่โปรดจำไว้ว่าคุณจะต้องแจ้งให้ WordPress ทราบถึงการเปลี่ยนแปลงโดยการบันทึกโครงสร้างลิงก์ถาวรของคุณใหม่ในหน้าการตั้งค่า -> หน้าผู้ดูแลระบบ Permalinks มิฉะนั้นเพจที่มีลิงก์ถาวรที่ขัดแย้งกันจะทำงานไม่ถูกต้อง
MarkPraschan

7

สิ่งนี้ใช้งานได้สำหรับฉันเช่น Rarst กล่าวว่าใช้remove_action ()ถ้าเป็นไปได้

add_action( 'after_setup_theme','remove_foundation_options', 100 );

function remove_foundation_options() {   
    remove_action( 'init', 'Orbit');    
}

5

ในฐานะที่เป็น t31os สังเกตว่ามันง่ายที่จะลบโพสต์ประเภทจากตัวแปรทั่วโลก

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


2
register_post_type()ไม่ใช่ฟังก์ชั่นที่ให้ยืมตัวเองอย่างดีต่อการเชื่อมต่อ วิธีปกติในการลงทะเบียนประเภทโพสต์คือการเรียกใช้ฟังก์ชั่นโดยตรงในฟังก์ชั่นที่เกี่ยวกับ init การลบการกระทำนั้นอาจมีผลกระทบที่ไม่พึงประสงค์เนื่องจากมักจะมีฟังก์ชั่นอื่น ๆ ที่ถูกลบออกจากฟังก์ชั่นนั้น
John P Bloch

@ John P Bloch อ๋อฉันรู้แล้ว บางครั้งคุณก็ต้องสร้าง init ทั้งหมดขึ้นมาใหม่เพื่อให้ถูกต้องในที่สุดมันก็ขึ้นอยู่กับรหัสเฉพาะและคุณภาพ / คุณภาพของมัน
Rarst

1

ใน WordPress เวอร์ชั่น 4.5 ขึ้นไปมีฟังก์ชันในการลบประเภทโพสต์ (unregister_post_type) ตัวอย่าง

function delete_post_type(){
unregister_post_type( 'jobs' );
}
add_action('init','delete_post_type');

มันจะทำงานได้อย่างแน่นอน

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