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

9

Cuando configuré meta cuadros en un tipo de publicación personalizado, lo hice usando el add_meta_boxesgancho, por ejemplo

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

Pero acabo de leer este tutorial que hace lo siguiente usando el admin_initgancho, así ...

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 es la primera vez que lo veo usando el admin_initgancho.

Pregunta

El último método (usando admin_init) hace el trabajo, pero ...

  • ¿Es este el método preferido ? (es decir, más optimizado?)
  • solo una forma diferente de lograr los mismos resultados, o
  • ¿Una mala manera de agregar meta cuadros? (si es así, ¿por qué?)
durmiente
fuente
44
Eche un vistazo a esta lista: codex.wordpress.org/Plugin_API/Action_Reference : no importa cuál use, siempre que no sea demasiado temprano ni demasiado tarde. Es mejor usar ganchos intuitivos y predecibles, por lo que add_meta_boxeses preferible.
Paul
@Paul Genial. ¿Puedes publicar esto como respuesta (para que pueda acreditarte)?
durmiente
3
De acuerdo, creo que simplemente el autor del tutorial no estaba al tanto add_meta_boxes. Tenemos incluso "add_meta_boxes_$post_type"para un control más fino.
brasofilo

Respuestas:

4

Eche un vistazo a esta lista: http://codex.wordpress.org/Plugin_API/Action_Reference

  1. No importa cuál use siempre y cuando no sea demasiado temprano ni demasiado tarde. Es mejor usar ganchos intuitivos y predecibles, por lo que add_meta_boxeses preferible. Algún día en el futuro, WordPress puede cambiar algo y al usar los ganchos más apropiados aumentará sus posibilidades de que su código siga funcionando en el futuro.
  2. Hay una excepción que puedo pensar en eso. A veces (en casos en los que es muy poco probable que suceda), es posible que necesite, por ejemplo, llamar, add_theme_support()que generalmente se usa con el after_setup_themeenganche de acción solo para usuarios registrados que son administradores, pero este enganche aún no le permite acceder a esta información. Por lo tanto, es probable que tenga que usar set_current_usero initenganches de acción en su lugar (después de investigar un poco si es seguro hacerlo).
Pablo
fuente
3

Hay varios otros ganchos:

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

e inmediatamente después corre:

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

Si desea realizar diferentes comprobaciones de cancelación desde el enlace / devolución de llamada que realmente registra los meta cuadros, use uno de los anteriores ya que el \WP_Screenobjeto no se llena tan pronto como se admin_initejecuta.

Si usó el add_meta_boxesgancho más genérico , puede verificar su primer argumento:

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

    add_meta_box( /* etc. */ );
}

Si no desea agregar su metacuadro siempre que la publicación no se haya guardado al menos una vez, puede verificar

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

y así. Conclusión: si desea reducir las cosas, use los ganchos que se muestran arriba.

emperador
fuente