Deregistrieren Sie benutzerdefinierte Beitragstypen

44

Kennt jemand eine Möglichkeit, benutzerdefinierte Beitragstypen abzumelden?

Gibt es ein Äquivalent zu register_post_type()?

anu
quelle
1
JEDER ANDERE, DER DIESES SUCHT. Wenn Sie einen benutzerdefinierten Beitragstyp registrieren, wird nichts in der Datenbank gespeichert. Die Pfostentabelle in der wp db ist unstrukturiert. Es ist die einzige Registrierung mit den Interna des WP-Skripts, bei der Sie einen Eintrag in der Posts-Tabelle mit dem Typ erstellen können, den Sie mit Register Posts erstellt haben. Hoffe das hilft jemand anderem.
MageProspero
2
Ab WordPress 4.5 gibt es dafür eine Funktion unregister_post_type. Siehe Beitragstyp mit unregister_post_type
abmelden

Antworten:

38

Derzeit gibt es keine Funktion zum Abmelden eines Beitragstyps, der Vorgang ist jedoch recht einfach.

Andrew Nacin hat einen Code für trac bereitgestellt, der hier zu finden und unten zu posten ist .

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;

Das Aufheben der Registrierung eines eingebauten Beitragstyps hat unbekannte Auswirkungen auf WordPress. Bitte tun Sie dies auf Ihr eigenes Risiko. Das Aufheben der Registrierung eines benutzerdefinierten Post-Typs sollte absolut sicher sein, würde aber natürlich keine Bereinigung Ihrer Installation bewirken (dh das Aufheben der Registrierung eines Post-Typs entspricht nicht dem Entfernen von Daten aus der Datenbank).

Ich kann mir einige Szenarien vorstellen, in denen dies erforderlich sein könnte, aber der sinnvollere Ansatz (wenn möglich) wäre, den Post-Typ einfach erst gar nicht zu registrieren, wenn er nicht gewünscht wird.

t31os
quelle
2
Gern geschehen .. :) Wenn Sie Ihre eigenen Beitragstypen in Codeform hinzufügen, besteht die einfachere Lösung darin, die Funktion / den Code zu entfernen, mit denen Sie sie hinzufügen. Beachten Sie auch, dass durch das Entfernen von Beitragstypen diese nicht aus Ihrer Beitragstabelle entfernt werden, sodass möglicherweise redundante Einträge in dieser Tabelle vorhanden sind.
t31os
2
@anu: Das einzige, was "permanent" bleibt, wenn Sie das register_post_type()Laden ( init) nicht auf jeder Seite ausführen, sind wahrscheinlich die Permalink-Struktur (aktualisieren und es wird nicht mehr angezeigt) und die Posts in der Datenbank, die Sie entfernen können indem du tust DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry
Interessanterweise habe ich den register_post_type-Code für diesen custom_post_type entfernt und keine Posts zu diesem CPT hinzugefügt, aber die Admin-Benutzeroberfläche wurde nicht entfernt.
Anu
Oder natürlich, jetzt, wo ich es noch einmal versuche, funktioniert es wie von euch beschrieben - dh die Admin-Benutzeroberfläche für das neue CPT ist verschwunden. Wahrscheinlich bin ich eine Muppet :) Nützliche Informationen trotzdem, also danke.
Anu
3
Update im Februar 2016 - Diese Funktion wurde im Core für WP 4.5.0 zusammengeführt (soll im April gestartet werden).
Ricardo BRGWeb
37

Ab Wordpress 4.5 ist Funktion , das zu tun, unregister_post_type. Beispiel:-

function delete_post_type(){
    unregister_post_type( 'blocks' );
}
add_action('init','delete_post_type');
Dhinju Divakaran
quelle
Dies muss eine höhere Priorität haben als die, die zum Registrieren des Post-Typs verwendet wurde, da es sonst nicht funktioniert
Mark Kaplun
@Dhinju Divakaran es löscht nicht den alten Beitragstyp von db, den ich jetzt nicht benutze.
Faiyaz Alam
Wenn dies funktioniert, stellen Sie sicher, dass Sie dieser Aktion eine hohe Priorität einräumen, verglichen mit der Aktion, mit der der Beitragstyp registriert wurde.
Ajith R Nair
1
Erwähnenswert ist, dass unregister_post_type()nichts aus der Datenbank gelöscht wird. Es wird nur verhindert, dass der Beitragstyp registriert wird.
Dave Romsey
Das hat für mich sehr gut funktioniert, aber denken Sie daran, dass Sie WordPress über die Änderung informieren müssen, indem Sie Ihre Permalink-Struktur auf der Seite Einstellungen -> Permalinks admin erneut speichern. Andernfalls funktionieren Seiten mit in Konflikt stehenden Permalinks nicht richtig.
MarkPraschan
7

Das hat bei mir funktioniert, wie Rarst sagte, wenn möglich mit remove_action () .

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

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

Wie bereits erwähnt, ist es einfach, den Post-Typ aus der globalen Variablen zu entfernen.

Aber wenn Sie einen Nicht-Core-Post-Typ meinen, ist es besser, nach Code zu suchen, der ihn registriert und sich von ihm löst remove_action()(wenn es ein anständiger Code ist, sollte er eingehakt und nicht direkt ausgeführt werden).

Rarst
quelle
2
register_post_type()ist keine Funktion, die sich gut zum Einhängen eignet. Die normale Art, einen Beitragstyp zu registrieren, besteht darin, die Funktion direkt in einer Funktion auszuführen, die mit init verknüpft ist. Das Entfernen dieser Aktion kann unerwünschte Auswirkungen haben, da häufig andere Funktionen mit dieser Funktion entfernt werden.
John P Bloch
@ John P Bloch yep, das ist mir bewusst. Manchmal wird am Ende der gesamte init-Code neu erstellt, um das
Problem zu beheben.
1

Ab WordPress-Version 4.5 bieten sie eine Funktion zum Entfernen des Post-Typs (unregister_post_type). Beispiel

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

Es wird definitiv funktionieren.

Nipun Tyagi
quelle