Meta-Boxen: 'admin_init' oder 'add_meta_boxes' Hook?

9

Beim Einrichten von Meta-Boxen in einem benutzerdefinierten Beitragstyp habe ich den add_meta_boxesHook verwendet, z

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

Aber ich habe gerade dieses Tutorial gelesen, das das Folgende mit dem admin_initHaken macht, wie so ...

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

Dies ist das erste Mal, dass ich es mit dem admin_initHaken gesehen habe.

Frage

Die letztere Methode (mit admin_init) funktioniert , aber ...

  • Ist dies die bevorzugte Methode? (dh optimierter?)
  • nur eine andere Art, die gleichen Ergebnisse zu erzielen, oder
  • ein schlechter Weg, um Meta-Boxen hinzuzufügen? (Wenn ja warum?)
Schläfer
quelle
4
Schauen Sie sich diese Liste an: codex.wordpress.org/Plugin_API/Action_Reference - es spielt keine Rolle, welche Sie verwenden, solange es nicht zu früh und nicht zu spät ist. Es ist am besten, intuitive und vorhersehbare Haken zu verwenden, daher add_meta_boxeswird dies bevorzugt.
Paul
@ Paul Großartig. Können Sie dies als Antwort posten (damit ich Sie gutschreiben kann)?
Schläfer
3
Einverstanden, ich denke, dass einfach der Autor des Tutorials nicht wusste add_meta_boxes. Wir haben noch "add_meta_boxes_$post_type"für eine feinere Kontrolle.
Brasofilo

Antworten:

4

Schauen Sie sich diese Liste an: http://codex.wordpress.org/Plugin_API/Action_Reference

  1. Es spielt keine Rolle, welches Sie verwenden, solange es nicht zu früh und nicht zu spät ist. Es ist am besten, intuitive und vorhersehbare Haken zu verwenden, daher add_meta_boxeswird dies bevorzugt. Eines Tages in der Zukunft kann WordPress etwas ändern und durch die Verwendung der am besten geeigneten Hooks erhöhen Sie Ihre Chancen, dass Ihr Code auch in Zukunft funktioniert.
  2. Es gibt eine Ausnahme, an die ich denken kann. Manchmal (in Fällen, in denen dies sehr unwahrscheinlich ist) müssen Sie beispielsweise einen Aufruf ausführen, add_theme_support()der im Allgemeinen mit after_setup_themeAktions-Hook nur für angemeldete Benutzer verwendet wird, die Administratoren sind. Mit diesem Hook können Sie jedoch noch nicht auf diese Informationen zugreifen. Sie müssten daher wahrscheinlich stattdessen set_current_useroder initAction-Hooks verwenden (nach einigen Recherchen, wenn dies sicher ist).
Paul
quelle
3

Es gibt mehrere andere Haken:

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

und sofort danach läuft:

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

Wenn Sie innerhalb des Hooks / Rückrufs, der die Meta-Boxen tatsächlich registriert, verschiedene Abbruchprüfungen durchführen möchten, verwenden Sie eine der oben genannten Methoden, da das \WP_ScreenObjekt nicht bereits bei der Ausführung gefüllt wird admin_init.

Wenn Sie den allgemeineren add_meta_boxesHook verwendet haben, können Sie ihn anhand seines ersten Arguments überprüfen:

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

    add_meta_box( /* etc. */ );
}

Wenn Sie Ihre Meta-Box nicht hinzufügen möchten, solange der Beitrag nicht mindestens einmal gespeichert wurde, können Sie dies überprüfen

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

und so weiter. Fazit: Wenn Sie eingrenzen möchten, verwenden Sie die oben gezeigten Haken.

Kaiser
quelle