डेरेगिस्टर कस्टम पोस्ट प्रकार


44

किसी को भी कस्टम पोस्ट प्रकार deregister करने का एक तरीका पता है?

के बराबर है register_post_type()?


1
किसी भी एक खोज यह है। जब आप एक कस्टम पोस्ट टाइप करते हैं तो डेटाबेस में कुछ भी सेव नहीं किया जाता है। Wp db में पोस्ट टेबल अनस्ट्रक्चर्ड है। इसका केवल wp स्क्रिप्ट के इंटर्नल्स के साथ पंजीकरण करना जो आप कभी भी पोस्ट की गई पोस्ट के साथ बनाए गए प्रकार के साथ पोस्ट टेबल में एक प्रविष्टि बना सकते हैं। आशा है कि कुछ और मदद करता है।
MageProspero

2
वर्डप्रेस 4.5 के अनुसार ऐसा करने के लिए फ़ंक्शन है unregister_post_typeUnregister_post_type
Dhinju Divakaran

जवाबों:


38

वर्तमान में एक पोस्ट प्रकार की अपंजीकृत करने के लिए कोई फ़ंक्शन नहीं है, हालांकि प्रक्रिया काफी सरल है।

एंड्रयू नैसिन ने ट्रैक पर कुछ कोड प्रदान किए, जो यहां पाए गए और नीचे पोस्ट किए गए हैं।

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;

एक अंतर्निहित पोस्ट प्रकार को अनइग्रिस्टर करने से वर्डप्रेस पर अज्ञात प्रभाव पड़ेगा, इसलिए कृपया अपने जोखिम पर ऐसा करें। एक कस्टम पोस्ट प्रकार की अपंजीकृत करना पूरी तरह से सुरक्षित होना चाहिए, लेकिन स्वाभाविक रूप से आपके इंस्टॉलेशन पर कोई सफाई नहीं करेगा (यानी पोस्ट प्रकार अनरजिस्टर्ड करना डेटाबेस से डेटा हटाने के बराबर नहीं है)।

मैं कुछ परिदृश्यों की कल्पना कर सकता हूं, जहां इसकी आवश्यकता हो सकती है, लेकिन अधिक समझदार दृष्टिकोण (जहां संभव हो), यह पोस्ट प्रकार को पहली जगह में पंजीकृत नहीं करना होगा यदि यह नहीं चाहता है।


2
आपका स्वागत है .. :) यदि आप अपने स्वयं के पोस्ट प्रकारों को कोड रूप में जोड़ रहे हैं, तो आसान समाधान यह होगा कि आप उन फ़ंक्शन / कोड को हटा दें जो उन्हें जोड़ता है। यह भी ध्यान दें, पोस्ट प्रकारों को हटाने से उन्हें आपके पोस्ट टेबल से बाहर नहीं निकाला जाता है, इसलिए आपके पास उस तालिका में अनावश्यक प्रविष्टियाँ हो सकती हैं।
t31os

2
@anu: केवल एक चीज जो "स्थायी" रहती है यदि आप register_post_type()प्रत्येक पृष्ठ लोड ( init) पर निष्पादित नहीं करते हैं, तो संभवतः पर्मलिंक संरचना है (इसे ताज़ा करें और यह चला जाएगा), और डेटाबेस में पोस्ट, जिसे आप निकाल सकते हैं करके DELETE FROM wp_posts WHERE post_type = '[your custom post type]'
जान फेब्री

दिलचस्प बात यह है कि, मैंने उस custom_post_type के लिए register_post_type कोड हटा दिया था, और मैंने उस cpt में कोई पोस्ट नहीं जोड़ी थी, लेकिन उसने व्यवस्थापक UI को नहीं हटाया।
अनु

या बेशक, अब जब मैं इसे फिर से कोशिश करता हूं, तो यह उन लोगों के रूप में काम करता है जैसे कि आप लोग बताए गए हैं - यानी नए सीपीटी के लिए व्यवस्थापक यूआई चले गए हैं। शायद मैं एक muppet जा रहा हूँ :) उपयोगी जानकारी वैसे भी, इसलिए धन्यवाद।
अनु

3
फरवरी 2016 में अपडेट - इस फ़ंक्शन को WP 4.5.0 के लिए कोर में विलय कर दिया गया था (अप्रैल में इसकी सराहना की जाएगी)।
रिकार्डो BRGWeb

37

वर्डप्रेस 4.5 के अनुसार ऐसा करने के लिए फ़ंक्शन है unregister_post_type,। उदाहरण:-

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

यह उच्च प्राथमिकता पर होने की जरूरत है, तो कोई भी पोस्ट प्रकार को पंजीकृत करने के लिए उपयोग किया जाता है अन्यथा यह काम नहीं करेगा
मार्क कपलुन

@ धींजू दिवाकरन यह पुराने पोस्ट प्रकार को डीबी से नहीं हटा रहे हैं जो मैं अभी उपयोग नहीं कर रहा हूं।
फियाज आलम

इसका काम, सुनिश्चित करें कि आप पोस्ट प्रकार को पंजीकृत करने के लिए उपयोग की जाने वाली कार्रवाई की तुलना में इस कार्रवाई को उच्च प्राथमिकता देते हैं।
अजित आर नायर

1
यह ध्यान देने योग्य है कि unregister_post_type()डेटाबेस से कुछ भी नहीं हटाया जाता है। यह केवल पोस्ट प्रकार को पंजीकृत होने से रोकता है।
डेव रोमसे

इसने मेरे लिए बहुत अच्छा काम किया, लेकिन ध्यान रखें कि आपको सेटिंग्स में अपनी Permalink संरचना को फिर से सहेजकर बदलाव की जानकारी देनी होगी -> Permalinks admin पेज। अन्यथा, परस्पर विरोधी पर्मलिंक वाले पृष्ठ सही तरीके से काम नहीं करते हैं।
मार्कप्रेचन

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 पर झुकाए गए फ़ंक्शन को चलाने के लिए। उस क्रिया को हटाने से अवांछित प्रभाव हो सकते हैं, क्योंकि उस फ़ंक्शन के साथ अक्सर अन्य कार्यक्षमता को हटा दिया जाएगा।
जॉन पी बलोच

@ जॉन पी बलोच हां, मुझे इसकी जानकारी है। कभी-कभी आप इसे ठीक करने के लिए सभी init का पुनर्निर्माण करते हैं, अंत में यह विशिष्ट कोड और इसकी गुणवत्ता / पवित्रता पर निर्भर करता है
Rarst

1

वर्डप्रेस संस्करण 4.5 और इसके बाद के संस्करण वे पोस्ट प्रकार (unregister_post_type) को निकालने के लिए एक फ़ंक्शन प्रदान करते हैं। उदाहरण

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

यह निश्चित रूप से काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.