web-dev-qa-db-fra.com

Comment enregistrer des types de post personnalisés dans un plugin?

J'utilise le code Démo de classe de plugin de toscho comme base du plugin que je développe. Entre autres choses, mon plugin enregistre un type de publication personnalisé.

public function plugin_setup() {
    $this->plugin_url = plugins_url( '/', __FILE__ );
    $this->plugin_path = plugin_dir_path( __FILE__ );
    $this->load_language( 'myplugindomain' );
    // more stuff: register actions and filters
    add_action( 'init', array( 'MyPluginClass', 'register_my_post_types' ) );
}

public function register_my_post_types() {
    $labels = array( ..... );

    $args = array(
        'show_ui' => true,
        'public' => true,
        'labels' => $labels,
        'supports' => array('title', 'editor', 'thumbnail'), 
        'has_archive' => true
    );

    register_post_type('mycustomtype', $args);
}

Ma question est la suivante: est-ce une bonne pratique d’attacher ma fonction register_my_post_types() au crochet init? Ou serait-il préférable de l'appeler directement dans la fonction plugin_setup()?

Merci d'avance

1
leemon

Le hook init est le premier hook autorisé. Si appelé plus tôt, ça ne marchera pas.

Voir WP Codex: https://codex.wordpress.org/Function_Reference/register_post_type

Créer ou modifier un type de message. register_post_type ne doit être invoqué que par l'action 'init'. Cela ne fonctionnera pas s'il est appelé avant 'init', et certains aspects du type de publication nouvellement créé ou modifié ne fonctionneront pas correctement s'il est appelé ultérieurement.

2
Jory Hogeveen

Je le fais toujours dans le crochet init. Si vous le faites dans la configuration, chaque fois qu’ils modifient la configuration ou les paramètres, vous enregistrerez ce type de publication. De plus, si vos paramètres changent l'URL ou toute partie du nouveau cpt, vous voudrez que ceux-ci soient actifs avant de les modifier.

2
rudtek