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


9

Quando ho impostato meta box in un tipo di post personalizzato, l'ho fatto usando l' add_meta_boxeshook, ad es

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

Ma ho appena letto questo tutorial che fa quanto segue usando l' admin_inithook, in questo modo ...

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

Questa è la prima volta che l'ho visto fatto usando il admin_initgancio.

Domanda

Il secondo metodo (usando admin_init) fa il lavoro, ma ...

  • è questo il metodo preferito ? (ovvero più ottimizzato?)
  • solo un modo diverso di ottenere gli stessi risultati, o
  • un brutto modo per aggiungere meta box? (se sì, perché?)

4
Dai un'occhiata a questo elenco: codex.wordpress.org/Plugin_API/Action_Reference - non importa quale usi se non è troppo presto e non troppo tardi. È meglio usare hook intuitivi e prevedibili, quindi add_meta_boxesè preferibile.
Paolo,

@Paul Grande. Puoi pubblicare questo come una risposta (così posso accreditarti)?
dormiente

3
D'accordo, penso che semplicemente l'autore del tutorial non ne fosse a conoscenza add_meta_boxes. Abbiamo persino "add_meta_boxes_$post_type"un controllo più preciso.
brasofilo,

Risposte:


4

Dai un'occhiata a questo elenco: http://codex.wordpress.org/Plugin_API/Action_Reference

  1. Non importa quale usi, purché non sia troppo presto e non troppo tardi. È meglio usare hook intuitivi e prevedibili, quindi add_meta_boxesè preferito. Un giorno in futuro WordPress potrebbe cambiare qualcosa e usando gli hook più appropriati aumenterai le tue possibilità che il tuo codice funzionerà ancora in futuro.
  2. C'è un'eccezione a cui posso pensare. A volte (nei casi in cui è molto improbabile che si verifichi), potrebbe essere necessario, ad esempio, chiamare add_theme_support()che viene generalmente utilizzato con il after_setup_themegancio di azione solo per gli utenti registrati che sono amministratori, ma questo gancio non consente ancora di accedere a queste informazioni. Dovresti quindi probabilmente usare set_current_usero inithook di azione invece (dopo aver fatto qualche ricerca se è sicuro farlo).

3

Ci sono molti altri ganci:

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

e subito dopo corre:

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

Se si desidera eseguire diversi controlli di interruzione all'interno dell'hook / callback che registra effettivamente le meta-box, utilizzare una delle opzioni precedenti poiché l' \WP_Screenoggetto non viene riempito non appena admin_initviene eseguito.

Se hai utilizzato l' add_meta_boxeshook più generico , puoi verificare il suo primo argomento:

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

    add_meta_box( /* etc. */ );
}

Se non vuoi aggiungere la tua meta-casella fintanto che il post non è stato salvato almeno una volta, puoi controllare

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

e così via. Conclusione: se vuoi restringere le cose, usa i ganci mostrati sopra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.