it-swarm.com.de

Meta-Boxen: Haken bei 'admin_init' oder 'add_meta_boxes'?

Wenn ich Meta-Boxen in einem benutzerdefinierten Beitragstyp einrichte, verwende ich dazu den Haken add_meta_boxes, 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 unter Verwendung des Hooks admin_init wie folgt vorgeht ...

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 gesehen habe, wie es mit dem Hook admin_init gemacht wurde.

Frage

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

  • ist das diebevorzugtMethode? (d. h. optimierter?)
  • nur eindifferentWeg, um die gleichen Ergebnisse zu erzielen, oder
  • ein Bad Weg, um Meta-Boxen hinzuzufügen? (Wenn ja warum?)
8
sleeper

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

  1. Es spielt keine Rolle, welchen Sie verwenden, solange es nicht zu früh und nicht zu spät ist. Verwenden Sie am besten intuitive und vorhersehbare Hooks. Daher wird add_meta_boxes 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, die sehr unwahrscheinlich sind) müssen Sie beispielsweise add_theme_support() aufrufen, was im Allgemeinen mit after_setup_theme action hook nur für angemeldete Benutzer verwendet wird, die Administratoren sind, aber mit diesem Hook können Sie noch nicht auf diese Informationen zugreifen. Sie müssten daher wahrscheinlich stattdessen set_current_user- oder init-Aktions-Hooks verwenden (nachdem Sie einige Nachforschungen angestellt haben, ob dies sicher ist).
4
Paul

Es gibt mehrere andere Haken:

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

und gleich danach läuft:

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

Wenn Sie innerhalb des Hooks/Callbacks, der die Meta-Boxen tatsächlich registriert, verschiedene Abbruchprüfungen durchführen möchten, verwenden Sie eine der oben genannten Optionen, da das Objekt \WP_Screen nicht bereits gefüllt ist, wenn admin_init ausgeführt wird.

Wenn Sie den allgemeineren Hook add_meta_boxes verwendet haben, können Sie anhand des 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 etwas einschränken möchten, verwenden Sie die oben gezeigten Haken.

2
kaiser