Deregister jenis kiriman khusus


44

Adakah yang tahu cara membatalkan registrasi jenis posting khusus?

Apakah ada yang setara dengan register_post_type()?


1
SETIAP ORANG LAIN MENCARI INI. Ketika Anda mendaftarkan jenis posting kustom tidak ada yang disimpan ke database. Tabel posting di wp db tidak terstruktur. Hanya mendaftar dengan internal skrip wp yang dapat Anda buat entri ke dalam tabel posting dengan jenis apa yang pernah Anda buat dengan posting register. Semoga itu bisa membantu orang lain.
MageProspero

2
Pada WordPress 4.5 ada fungsi untuk melakukan itu unregister_post_type. Lihat Membatalkan registrasi jenis posting menggunakan unregister_post_type
Dhinju Divakaran

Jawaban:


38

Saat ini tidak ada fungsi untuk membatalkan registrasi tipe posting, namun prosesnya cukup sederhana.

Andrew Nacin memberikan beberapa kode pada trac, ditemukan di sini dan diposting di bawah ini.

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;

Membatalkan registrasi tipe posting bawaan akan memiliki efek yang tidak diketahui pada WordPress, jadi silakan lakukan dengan risiko Anda sendiri. Membatalkan registrasi jenis posting kustom harus benar-benar aman, tetapi tentu saja tidak melakukan pembersihan pada instalasi Anda (mis. Membatalkan registrasi jenis posting tidak sama dengan penghapusan data dari database).

Saya bisa membayangkan beberapa skenario di mana ini bisa diperlukan, tetapi pendekatan yang lebih masuk akal (jika memungkinkan), adalah dengan tidak mendaftarkan jenis posting di tempat pertama jika tidak diinginkan.


2
Sama-sama .. :) Jika Anda menambahkan jenis posting Anda sendiri dalam bentuk kode, solusi yang lebih mudah adalah dengan menghapus fungsi / kode yang Anda jalankan yang menambahkannya. Perhatikan juga, menghapus tipe posting tidak menghilangkannya dari tabel posting Anda, jadi Anda mungkin memiliki entri redundansi di tabel itu.
t31os

2
@ anu: Satu-satunya hal yang tetap "permanen" jika Anda tidak mengeksekusi register_post_type()pada setiap halaman memuat ( init) mungkin struktur permalink (refresh dan akan hilang), dan posting di database, yang dapat Anda hapus dengan melakukan DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry

Menariknya, saya memang menghapus kode register_post_type untuk custom_post_type itu, dan saya belum menambahkan posting apa pun ke cpt itu, tetapi tidak menghapus UI admin.
anu

Atau tentu saja, sekarang saya coba ini lagi, itu berfungsi seperti yang Anda gambarkan - yaitu UI admin untuk cpt baru telah hilang. Mungkin saya menjadi muppet :) Info berguna, jadi terima kasih.
anu

3
Pembaruan pada Februari 2016 - fungsi ini digabungkan dalam inti untuk WP 4.5.0 (akan diluncurkan pada bulan April).
Ricardo BRGWeb

37

Pada WordPress 4.5 ada fungsi untuk melakukan itu unregister_post_type,. Contoh:-

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

ini harus pada prioritas yang lebih tinggi daripada yang digunakan untuk mendaftarkan jenis posting jika tidak maka tidak akan berhasil
Mark Kaplun

@Dhinju Divakaran itu tidak menghapus tipe posting lama dari db yang tidak saya gunakan sekarang.
Faiyaz Alam

berfungsi, pastikan Anda memberikan prioritas tinggi untuk tindakan ini dibandingkan dengan tindakan yang digunakan untuk mendaftarkan jenis posting.
Ajith R Nair

1
Perlu disebutkan bahwa unregister_post_type()tidak menghapus apa pun dari database. Itu hanya mencegah jenis posting dari didaftarkan.
Dave Romsey

Ini berfungsi baik untuk saya, tetapi perlu diingat bahwa Anda harus memberi tahu WordPress tentang perubahan dengan menyimpan kembali struktur Permalink Anda di Pengaturan -> halaman admin Permalinks. Jika tidak, halaman dengan permalink yang bertentangan tidak berfungsi dengan benar.
MarkPraschan

7

Ini bekerja untuk saya, seperti yang dikatakan Rarst menggunakan remove_action () jika memungkinkan.

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

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

5

Seperti yang dicatat t31os, mudah untuk menghapus tipe posting dari variabel global.

Tetapi jika Anda maksud jenis posting non-inti maka akan lebih baik untuk mencari kode yang mendaftarkannya dan melepaskan kaitannya remove_action()(jika kode yang layak itu harus dikaitkan daripada dijalankan secara langsung).


2
register_post_type()bukan fungsi yang cocok untuk hooking. Cara normal untuk mendaftarkan tipe posting adalah dengan menjalankan fungsi secara langsung dalam fungsi yang terhubung dengan init. Menghapus tindakan itu mungkin memiliki efek yang tidak diinginkan, karena sering kali ada fungsionalitas lain yang dihapus dengan fungsi itu.
John P Bloch

@ John P Bloch ya, saya tahu itu. Kadang-kadang Anda akhirnya membangun kembali semua init untuk memperbaikinya, pada akhirnya itu tergantung pada kode spesifik dan kualitas / kewarasannya
Rarst

1

Di WordPress versi 4.5 dan lebih tinggi, mereka menyediakan fungsi untuk menghapus tipe posting (unregister_post_type). Contoh

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

Ini akan bekerja dengan pasti.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.