Annuler l'enregistrement des types de publication personnalisés


44

Quelqu'un connaît-il un moyen de désenregistrer des types de publication personnalisés?

Y a-t-il un équivalent à register_post_type()?


1
TOUT AUTRE CHERCHE CE. Lorsque vous enregistrez un type d'article personnalisé, rien n'est enregistré dans la base de données. La table posts dans la base de données wp n'est pas structurée. Pour vous inscrire aux éléments internes du script wp, vous pouvez créer une entrée dans la table des publications avec le type de ce que vous avez créé avec les publications du registre. J'espère que cela aide quelqu'un d'autre.
MageProspero

2
A partir de WordPress 4.5, il existe une fonction pour le faire unregister_post_type. Voir
Annuler l'

Réponses:


38

Actuellement, il n'existe pas de fonction permettant d'annuler l'enregistrement d'un type d'article, le processus est toutefois assez simple.

Andrew Nacin a fourni du code sur trac, disponible ici et affiché ci-dessous.

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;

La désinscription d'un type de message intégré aura des effets inconnus sur WordPress. Veuillez donc le faire à vos risques et périls. L'annulation de l'enregistrement d'un type d'article personnalisé devrait être parfaitement sûre, mais aucun nettoyage ne serait naturellement effectué sur votre installation (c'est-à-dire que l'annulation d'un type d'article ne correspond pas à la suppression de données de la base de données).

Je peux imaginer quelques scénarios où cela pourrait être nécessaire, mais l'approche la plus judicieuse (dans la mesure du possible) serait simplement de ne pas enregistrer le type de message en premier lieu s'il n'est pas souhaité.


2
De rien .. :) Si vous ajoutez vos propres types d'article sous forme de code, la solution la plus simple consiste à supprimer simplement la fonction / le code que vous exécutez et qui les ajoute. Notez également que la suppression des types de publication ne les supprime pas de votre table de publications. Vous pouvez donc avoir des entrées redondantes dans cette table.
t31os

2
@anu: La seule chose qui reste "permanente" si vous n'exécutez pas le register_post_type()chargement de chaque page ( init) est probablement la structure de lien permanent (rafraîchissez-le et le fichier disparaîtra), ainsi que les publications dans la base de données que vous pouvez supprimer. en faisant DELETE FROM wp_posts WHERE post_type = '[your custom post type]'.
Jan Fabry

Fait intéressant, j'ai supprimé le code register_post_type pour ce custom_post_type et je n'ai ajouté aucune publication à ce cpt, mais cela n'a pas supprimé l'interface utilisateur de l'administrateur.
Anu

Bien sûr, maintenant que j'essaie à nouveau, cela fonctionne comme vous l'avez décrit - c'est-à-dire que l'interface utilisateur d'administration du nouveau cpt a disparu. Probablement que je sois un muppet :) info utile quand même, alors merci.
Anu

3
Mise à jour en février 2016 - cette fonction a été fusionnée dans le noyau de WP 4.5.0 (à paraître en avril).
Ricardo BRGWeb

37

À partir de WordPress 4.5, il existe une fonction pour le faire unregister_post_type. Exemple:-

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

cette nécessité doit être sur une priorité plus élevée que celle utilisée pour enregistrer le type de publication sinon cela ne fonctionnera pas
Mark Kaplun

@Dhinju Divakaran ne supprime pas l'ancien type de message de la base de données que je n'utilise pas pour le moment.
Faiyaz Alam le

son fonctionnement, assurez-vous de donner une priorité élevée à cette action par rapport à l’action utilisée pour enregistrer le type de publication.
Ajith R Nair

1
Il est à noter que unregister_post_type()cela ne supprime rien de la base de données. Cela empêche uniquement l'enregistrement du type de message.
Dave Romsey

Cela a très bien fonctionné pour moi, mais gardez à l'esprit que vous devez informer WordPress de la modification en réenregistrant votre structure Permalink dans la page d'administration Paramètres -> Permaliens. Sinon, les pages avec des permaliens en conflit ne fonctionnent pas correctement.
MarkPraschan le

7

Cela a fonctionné pour moi, comme dit Rarst en utilisant remove_action () si possible.

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

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

5

Comme t31os l’a noté, il est facile de supprimer le type de publication de la variable globale.

Mais si vous parlez de type de message non essentiel, il serait préférable de rechercher le code qui l'enregistre et de le décrocher remove_action()(s'il s'agit d'un code correct, il devrait être accroché plutôt que exécuté directement).


2
register_post_type()n’est pas une fonction qui se prête bien à l’accrochage. La manière habituelle d’enregistrer un type de publication consiste à exécuter la fonction directement dans une fonction accrochée à init. La suppression de cette action peut avoir des effets indésirables, car d’autres fonctionnalités seront souvent supprimées avec cette fonction.
John P Bloch

@ John P Bloch oui, je suis conscient de cela. Parfois, vous finissez par reconstruire tous les fichiers init pour bien faire les choses. En fin de compte, cela dépend d'un code spécifique et de sa qualité / bien-être
Rarst

1

Dans WordPress version 4.5 et ultérieure, ils fournissent une fonction permettant de supprimer le type de publication (unregister_post_type). Exemple

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

Cela fonctionnera définitivement.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.