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

8

Ao configurar caixas meta em um tipo de postagem personalizado, usei o add_meta_boxes hook, 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 gancho admin_init , 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' 
    );
}

Esta é a primeira vez que a vejo usando o admin_init hook.

Pergunta

O último método (usando admin_init ) funciona mas ...

  • este é o método preferido ? (isto é, mais otimizado?)
  • apenas uma maneira diferente de alcançar os mesmos resultados, ou
  • uma maneira ruim de adicionar caixas meta? (se sim, por quê?)
por sleeper 26.09.2013 / 23:12

2 respostas

4

Veja esta lista: enlace

  1. Não importa qual você usa, desde que não seja cedo demais nem tarde demais. É melhor usar ganchos intuitivos e previsíveis, então add_meta_boxes é o preferido. Algum dia, no futuro, o WordPress pode 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 eu posso pensar nisso. Às vezes (em casos que são muito improváveis de acontecer) você pode precisar, por exemplo, chamar add_theme_support() , que geralmente é usado com after_setup_theme hook de ação apenas para usuários logados que são administradores, mas esse hook não permite que você acesse este informações ainda. Portanto, você provavelmente teria que usar set_current_user ou init action hooks (depois de fazer alguma pesquisa se for seguro fazer isso).
por Paul 27.09.2013 / 13:12
2

Existem vários outros ganchos:

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

e imediatamente depois é executado:

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

Se você quiser executar diferentes verificações de anulação dentro do gancho / retorno de chamada que realmente registra as caixas meta, use uma das opções acima, pois o objeto \WP_Screen não é preenchido tão cedo quanto admin_init é executado.

Se você usou o gancho mais genérico add_meta_boxes , você pode verificar seu 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 meta box, 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.

    
por kaiser 16.03.2014 / 17:16