Dezînregistrare tipuri personalizate de postări

9 nov. 2010, 15:33:18
Vizualizări: 66.1K
Voturi: 50

Știe cineva o modalitate de a dezînregistra tipurile personalizate de postări?

Există un echivalent pentru register_post_type()?

2
Comentarii

MAI CINEVA CĂUTÂND ACEST LUCRU. Când înregistrezi un tip de postare personalizat, nimic nu este salvat în baza de date. Tabelul de postări din baza de date WordPress este nestructurat. Se înregistrează doar în interiorul scriptului WordPress, astfel încât poți crea o intrare în tabelul de postări cu tipul oricărui lucru pe care l-ai creat cu register_post_type. Sper că acest lucru ajută pe cineva.

James Andino James Andino
4 feb. 2016 01:00:37

Începând cu WordPress 4.5 există o funcție pentru asta unregister_post_type. Vezi Anulează înregistrarea unui tip de postare folosind unregister_post_type

Dhinju Divakaran Dhinju Divakaran
12 iul. 2016 07:54:48
Toate răspunsurile la întrebare 5
5
43

Începând cu WordPress 4.5 există o funcție pentru a face acest lucru, unregister_post_type. Exemplu:-

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');
12 iul. 2016 07:57:28
Comentarii

acest lucru trebuie să aibă o prioritate mai mare decât cea folosită pentru înregistrarea tipului de postare, altfel nu va funcționa

Mark Kaplun Mark Kaplun
12 iul. 2016 08:46:05

@Dhinju Divakaran nu șterge vechiul tip de postare din baza de date pe care nu îl mai folosesc acum.

Faiyaz Alam Faiyaz Alam
3 feb. 2017 07:48:13

funcționează, asigură-te că acțiunii îi dai o prioritate mai mare în comparație cu acțiunea folosită pentru înregistrarea tipului de postare.

Ajith R Nair Ajith R Nair
15 mai 2017 00:23:07

Merită menționat că unregister_post_type() nu șterge nimic din baza de date. Doar împiedică înregistrarea tipului de postare.

Dave Romsey Dave Romsey
3 mar. 2018 02:40:07

A funcționat perfect pentru mine, dar reține că va trebui să anunți WordPress despre această modificare prin salvarea din nou a structurii de permalinkuri în pagina Setări -> Permalinkuri. Altfel, paginile cu permalinkuri conflictuale nu vor funcționa corect.

MarkPraschan MarkPraschan
1 feb. 2019 19:23:30
7
39

În prezent, nu există o funcție pentru dezînregistrarea unui tip de postare, însă procesul este destul de simplu.

Andrew Nacin a furnizat un cod pe trac, găsit aici și postat mai jos.

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;

Dezînregistrarea unui tip de postare încorporat poate avea efecte necunoscute asupra WordPress, așa că faceți acest lucru pe propriul risc. Dezînregistrarea unui tip de postare personalizat ar trebui să fie perfect sigură, dar în mod natural nu va efectua nicio curățare în instalarea dvs. (adică dezînregistrarea unui tip de postare nu echivalează cu eliminarea datelor din baza de date).

Îmi pot imagina câteva scenarii în care acest lucru ar putea fi necesar, dar abordarea mai sensibilă (acolo unde este posibil) ar fi să nu înregistrați tipul de postare de la bun început dacă nu este dorit.

9 nov. 2010 15:51:12
Comentarii

Cu plăcere.. :) Dacă adăugați propriile tipuri de postări în formă de cod, soluția mai simplă ar fi să eliminați pur și simplu funcția/codul pe care îl rulați pentru a le adăuga. De asemenea, rețineți că eliminarea tipurilor de postări nu le elimină din tabela postărilor, așa că s-ar putea să aveți intrări redundante în acea tabelă.

t31os t31os
9 nov. 2010 16:16:52

@anu: Singurul lucru care rămâne "permanent" dacă nu executați register_post_type() la fiecare încărcare de pagină (init) este probabil structura permalink-ului (reîmprospătați-o și va dispărea), și postările din baza de date, pe care le puteți elimina executând DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.

Jan Fabry Jan Fabry
9 nov. 2010 16:35:03

Interesant, am eliminat codul register_post_type pentru acel custom_post_type și nu adăugasem nicio postare în acel cpt, dar nu a eliminat interfața de administrare.

anu anu
9 nov. 2010 16:36:04

Bineînțeles, acum când încerc din nou, funcționează așa cum ați descris voi - adică interfața de administrare pentru noul CPT a dispărut. Probabil am fost eu neatent :) Oricum, informații utile, așa că mulțumesc.

anu anu
9 nov. 2010 16:37:44

Actualizare în februarie 2016 - această funcție a fost integrată în nucleul WordPress pentru versiunea 4.5.0 (care urma să fie lansată în aprilie).

Ricardo Gonçalves Ricardo Gonçalves
4 feb. 2016 21:43:41

Ar putea fi util să aruncați o privire asupra codului real (destul de scurt) folosit pentru funcția care a fost inclusă în nucleu, aici: https://developer.wordpress.org/reference/functions/unregister_post_type/. Face puțin mai mult decât această funcție, deși nu sunt sigur când au fost introduse funcțiile pe care se bazează aceste îmbunătățiri.

User User
2 mar. 2018 22:14:58

Funcția de eliminare a CPT-ului Project postată aici intră în conflict cu Divi 3.11.x. Ar trebui să fiți conștienți de utilizarea acesteia.

Ciro Urdaneta Ciro Urdaneta
2 aug. 2018 16:32:43
Arată celelalte 2 comentarii
0

Acest lucru a funcționat pentru mine, așa cum a spus Rarst, folosind remove_action() dacă este posibil.

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

function remove_foundation_options() {   
    remove_action( 'init', 'Orbit');    
}
19 ian. 2012 17:09:08
2

După cum a menționat t31os, este ușor să elimini un tip de postare din variabila globală.

Dar dacă te referi la un tip de postare non-core, atunci ar fi mai bine să cauți codul care îl înregistrează și să îl dezactivezi folosind remove_action() (dacă este un cod bine scris, ar trebui să fie înregistrat cu un hook și nu rulat direct).

9 nov. 2010 15:55:35
Comentarii

register_post_type() nu este o funcție care se pretează ușor la hook-uri. Modul normal de a înregistra un tip de postare este să rulezi funcția direct într-o funcție legată la init. Eliminarea acelei acțiuni poate avea efecte nedorite, deoarece adesea vor fi eliminate și alte funcționalități odată cu acea funcție.

John P Bloch John P Bloch
9 nov. 2010 15:59:01

@John P Bloch da, sunt conștient de asta. Uneori ajungi să reconstruiești tot init-ul ca să funcționeze corect, în final depinde de codul specific și de calitatea/sănătatea lui

Rarst Rarst
9 nov. 2010 16:21:16
0

În WordPress versiunea 4.5 și mai nouă, există o funcție pentru a elimina un tip de postare (unregister_post_type). Exemplu

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

Va funcționa cu siguranță.

18 iul. 2017 07:41:54