Kayıt silme özel gönderi türleri


44

Özel gönderi türlerinin kaydını silmenin bir yolunu bilen var mı?

Eşdeğeri var mı register_post_type()?


1
BU BİR ARAYAN BİR HER YER. Özel bir yazı tipi kaydettiğinizde veritabanına hiçbir şey kaydedilmez. Wp db içindeki mesaj tablosu yapılandırılmamıştır. Sadece wp betiğinin içindekilerine kaydolmak, kayıt defterleri ile oluşturduklarınızı türüyle yazı tablosuna bir giriş oluşturabilirsiniz. Umarım bu başka birine yardımcı olur.
MageProspero

2
WordPress 4.5'ten itibaren bunun için bir fonksiyon var unregister_post_type. Bkz kaydını iptal sonrası tipi kullanılarak unregister_post_type
Dhinju Divakaran

Yanıtlar:


38

Şu anda bir yazı türünün kaydını silmek için bir işlev yoktur, ancak işlem oldukça basittir.

Andrew Nacin bazı kodlar trac üzerinde verdi, burada bulundu ve aşağıda kaydedildi.

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;

Yerleşik bir yazı tipinin kaydını silmek, WordPress üzerinde bilinmeyen etkilere sahip olacaktır, bu nedenle lütfen kendi sorumluluğunuzdadır. Özel bir gönderi türünün kaydını silmek tamamen güvenli olmalıdır, ancak doğal olarak kurulumunuzda hiçbir temizlik yapmaz (örneğin, bir gönderi türünün kaydını silmek, veritabanındaki verilerin kaldırılmasıyla aynı değildir).

Bunun gerekli olabileceği birkaç senaryo hayal edebiliyorum, ancak daha mantıklı olan yaklaşım (mümkün olduğunda), istemiyorsa post tipini ilk etapta kaydetmemek olacaktır.


2
Bir şey değil .. :) Eğer kendi yazı tiplerinizi kod biçiminde ekliyorsanız, en kolay çözüm, çalıştırdığınız işlevi / kodu ekleyen basitçe kaldırmak olacaktır. Ayrıca, yazı tiplerini kaldırmak onları yazı tablonuzdan dışarı atmadığından, o tablodaki artıklık girişleri olabileceğini unutmayın.
t31os

2
@anu: register_post_type()Her sayfa yüklemesinde çalışmazsanız "kalıcı" kalan tek şey (init ) muhtemelen permalink yapısıdır (yenileyin ve kaybolur) ve veritabanında bulunan ve kaldırabileceğiniz mesajlardır. yaparak DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry,

İlginçtir ki, o custom_post_type için register_post_type kodunu kaldırdım ve bu cpt'ye hiç mesaj eklemedim, ancak yönetici kullanıcı arayüzünü kaldırmadı.
anu

Veya elbette, şimdi tekrar deniyorum, sizin tanımladığınız gibi çalışıyor - yeni cpt için yönetici UI gitti. Muhtemelen ben bir muppet olmak :) Yine de Faydalı bilgiler, çok teşekkürler.
anu

3
Şubat 2016'daki güncelleme - bu işlev WP 4.5.0 için çekirdek olarak birleştirildi (nisan ayında temellendirildi).
Ricardo BRGWeb,

37

WordPress 4.5'ten itibaren, bunun için işlev yoktur unregister_post_type. Örnek:-

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

bunun yazı önceliğini kaydetmek için kullanılandan daha yüksek önceliğe sahip olması gerekir, aksi halde işe yaramaz
Mark Kaplun

@Dhinju Divakaran, şu an kullanmadığım eski yazı türünü db'den silmiyor.
Faiyaz Alam

Çalışırken, yazı tipini kaydetmek için kullanılan eylemle karşılaştırıldığında bu işleme öncelik verdiğinizden emin olun.
Ajith R Nair,

1
unregister_post_type()Veritabanından hiçbir şey silmediğinden bahsetmeye değer . Yalnızca posta türünün kaydedilmesini önler.
Dave Romsey

Bu benim için çok işe yaradı, ancak Permalink yapınızı Ayarlar -> Permalinks admin sayfasında tekrar kaydederek WordPress’e değişikliği bildirmeniz gerektiğini unutmayın. Aksi takdirde, çakışmayan kalıcı bağlantı içeren sayfalar düzgün çalışmıyor.
MarkPraschan

7

Bu benim için çalıştı, Rarst'ın mümkünse remove_action () kullandığını söylediği gibi .

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

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

5

T31os'un işaret ettiği gibi post tipini global değişkenden çıkarmak kolaydır.

Fakat eğer çekirdek olmayan yazı tipini kastediyorsanız, onu kaydeden ve çözen kodun aranması daha iyi olacaktır remove_action()(eğer uygun kod ise doğrudan çalıştırılmak yerine bağlanması gerekir).


2
register_post_type()kancaya güzelce kendini veren bir işlev değildir. Bir yazı tipini kaydetmenin normal yolu, işlevi doğrudan init'e bağlı bir işlevde çalıştırmaktır. Bu işlemin kaldırılması istenmeyen etkilere neden olabilir, çünkü bu işlevle kaldırılan başka işlevler de sık sık olacaktır.
John P Bloch

@ John P Bloch evet, bunun farkındayım. Bazen, doğru olanı elde etmek için tüm initleri yeniden inşa edersiniz, sonunda belirli bir koda ve kalitesine / akıl sağlığına bağlıdır
Rarst

1

WordPress sürüm 4.5 ve daha üst sürümlerinde, post tipini (unregister_post_type) kaldırmak için bir işlev sağlarlar. Örnek

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

Kesinlikle çalışacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.