web-dev-qa-db-fra.com

Meta Boxes: crochet de type 'admin_init' ou 'add_meta_boxes'?

Lors de la configuration de boîtes de méta dans un type de message personnalisé, je l’ai déjà fait avec le crochet add_meta_boxes, par exemple.

add_action('add_meta_boxes', 'meta_box_setup');
function meta_box_setup()
{
    add_meta_box( 
        'mb_movie_review', 
        'Movie Review Details', 
        'display_movie_review_mb', 
        'movie-reviews', 
        'side', 
        'high' 
    );
}

Mais je viens de lire ce tutoriel qui fait ce qui suit en utilisant le hook admin_init, comme alors ...

add_action('admin_init', 'meta_box_setup');
function meta_box_setup()
{
    add_meta_box( 
        'mb_movie_review', 
        'Movie Review Details', 
        'display_movie_review_mb', 
        'movie-reviews', 
        'side', 
        'high' 
    );
}

C'est la première fois que je le vois utiliser le hook admin_init.

Question

La dernière méthode (en utilisant admin_init) fait fonctionne mais ...

  • est-ce lapréféréeméthode? (c'est-à-dire plus optimisé?)
  • juste undifférentmoyen d'obtenir les mêmes résultats, ou
  • un mauvais moyen d'ajouter des boîtes de méta? (si oui, pourquoi?)
8
sleeper

Regardez cette liste: http://codex.wordpress.org/Plugin_API/Action_Reference

  1. Peu importe celui que vous utilisez tant qu'il n'est pas trop tôt ni trop tard. Il est préférable d'utiliser des hooks intuitifs et prévisibles, donc add_meta_boxes est préférable. Un jour, dans l'avenir, WordPress pourrait changer quelque chose et en utilisant les crochets les plus appropriés, vous augmentez vos chances que votre code fonctionne encore à l'avenir.
  2. Il y a une exception à laquelle je peux penser. Parfois (dans des cas très peu probables), vous aurez peut-être besoin d'appeler, par exemple, add_theme_support() qui est généralement utilisé avec le hook d'action after_setup_theme uniquement pour les utilisateurs connectés qui sont des administrateurs, mais ce hook ne vous permet pas encore d'accéder à ces informations. Il vous faudra donc probablement utiliser les crochets d'action set_current_user ou init (après quelques recherches, s'il est prudent de le faire).
4
Paul

Il y a plusieurs autres crochets:

do_action( 'add_meta_boxes', $post_type, $post );

et exécute immédiatement après:

do_action( "add_meta_boxes_{$post_type}", $post );

Si vous souhaitez effectuer différentes vérifications d'abandon à partir du raccord/rappel qui enregistre les méta-boîtes, utilisez l'une des méthodes ci-dessus, car l'objet \WP_Screen n'est pas rempli dès l'exécution de admin_init.

Si vous avez utilisé le hook plus générique add_meta_boxes, vous pouvez vérifier son premier argument:

function register( $post_type, $post )
{
    if ( get_current_screen()->post_type !== $post_type )
        return;

    add_meta_box( /* etc. */ );
}

Si vous ne souhaitez pas ajouter votre méta-boîte tant que le message n'a pas été enregistré au moins une fois, vous pouvez vérifier

if ( 'add' !== get_current_screen()->action )
    return;

etc. Conclusion: si vous voulez restreindre les choses, utilisez les crochets ci-dessus.

2
kaiser