Meta Boxes: hook 'admin_init' ou 'add_meta_boxes'?

9

Lors de la configuration de méta-boîtes dans un type de message personnalisé, je le fais en utilisant le add_meta_boxescrochet, 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 admin_initcrochet, comme ça ...

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 en utilisant le admin_initcrochet.

Question

Cette dernière méthode ( en utilisant admin_init) fait le travail , mais ...

  • est-ce la méthode préférée ? (c'est-à-dire plus optimisé?)
  • juste une manière différente d'obtenir les mêmes résultats, ou
  • une mauvaise façon d'ajouter des méta-boîtes? (si oui, pourquoi?)
dormeur
la source
4
Jetez un œil à cette liste: codex.wordpress.org/Plugin_API/Action_Reference - peu importe lequel vous utilisez tant qu'il n'est pas trop tôt ni trop tard. Il est préférable d'utiliser des crochets intuitifs et prévisibles, c'est donc add_meta_boxespréférable.
Paul
@Paul Great. Pouvez-vous poster ceci comme réponse (afin que je puisse vous créditer)?
dormeur
3
D'accord, je pense que l'auteur du didacticiel n'était tout simplement pas au courant add_meta_boxes. Nous avons même "add_meta_boxes_$post_type"pour un contrôle plus fin.
brasofilo

Réponses:

4

Jetez un œil à 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 crochets intuitifs et prévisibles, c'est donc add_meta_boxespréférable. Un jour, WordPress pourrait changer quelque chose et en utilisant les crochets les plus appropriés, vous augmentez vos chances que votre code fonctionne toujours à l'avenir.
  2. Il y a une exception à laquelle je peux penser. Parfois (dans des cas très improbables), vous devrez peut-être, par exemple, appeler add_theme_support()qui est généralement utilisé avec le after_setup_themehook d'action uniquement pour les utilisateurs connectés qui sont administrateurs, mais ce hook ne vous permet pas encore d'accéder à ces informations. Vous devrez donc probablement utiliser set_current_userou initactionner des crochets à la place (après avoir fait des recherches si vous pouvez le faire en toute sécurité).
Paul
la source
3

Il existe plusieurs autres crochets:

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

et immédiatement après:

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

Si vous souhaitez effectuer différentes vérifications d'abandon à partir du crochet / rappel qui enregistre réellement les métadonnées, utilisez l'une des options ci-dessus car l' \WP_Screenobjet n'est pas rempli dès les admin_initexécutions.

Si vous avez utilisé le add_meta_boxeshook plus générique , 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 cocher

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

etc. Conclusion: Si vous souhaitez affiner les choses, utilisez les crochets illustrés ci-dessus.

kaiser
la source