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

9

Ao configurar as meta boxes em um tipo de postagem personalizado, eu o faço usando o add_meta_boxesgancho, por exemplo

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' 
    );
}

Mas acabei de ler este tutorial que faz o seguinte usando o admin_initgancho, assim ...

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' 
    );
}

É a primeira vez que o vejo usando o admin_initgancho.

Questão

O último método (usando admin_init) faz o trabalho, mas ...

  • este é o método preferido ? (ou seja, mais otimizado?)
  • apenas uma maneira diferente de obter os mesmos resultados, ou
  • uma maneira ruim de adicionar meta boxes? (se sim, por quê?)
dorminhoco
fonte
4
Dê uma olhada nesta lista: codex.wordpress.org/Plugin_API/Action_Reference - não importa qual deles você usar, desde que não seja muito cedo nem muito tarde. É melhor usar ganchos intuitivos e previsíveis, por isso add_meta_boxesé preferível.
Paul
@Paul Great. Você pode postar isso como uma resposta (para que eu possa creditar você)?
sleeper
3
Concordo, acho que simplesmente o autor do tutorial não estava ciente add_meta_boxes. Temos ainda "add_meta_boxes_$post_type"um controle mais preciso .
brasofilo 27/09/13

Respostas:

4

Dê uma olhada nesta lista: http://codex.wordpress.org/Plugin_API/Action_Reference

  1. Não importa qual você usar, desde que não seja muito cedo nem muito tarde. É melhor usar ganchos intuitivos e previsíveis, por isso add_meta_boxesé preferível. Algum dia no futuro, o WordPress poderá mudar alguma coisa e, usando os ganchos mais apropriados, você aumenta suas chances de que seu código ainda funcione no futuro.
  2. Há uma exceção que posso pensar nisso. Às vezes (em casos muito improváveis ​​de acontecer), pode ser necessário, por exemplo, uma chamada add_theme_support()que geralmente é usada com after_setup_themegancho de ação apenas para usuários logados que são administradores, mas esse gancho ainda não permite que você acesse essas informações. Portanto, você provavelmente teria que usar ganchos set_current_userou initações (depois de fazer alguma pesquisa, se for seguro fazê-lo).
Paulo
fonte
3

Existem vários outros ganchos:

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

e imediatamente depois executa:

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

Se você deseja executar diferentes verificações de cancelamento no gancho / retorno de chamada que realmente registra as meta boxes, use uma das opções acima, pois o \WP_Screenobjeto não é preenchido tão cedo quanto admin_inité executado.

Se você usou o add_meta_boxesgancho mais genérico , poderá verificar o primeiro argumento:

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

    add_meta_box( /* etc. */ );
}

Se você não quiser adicionar sua caixa de meta, desde que a postagem não tenha sido salva pelo menos uma vez, verifique

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

e assim por diante. Conclusão: Se você quiser restringir as coisas, use os ganchos mostrados acima.

kaiser
fonte