メタボックス: 'admin_init'または 'add_meta_boxes'フック?


9

カスタム投稿タイプでメタボックスを設定するとき、add_meta_boxesフックを使用して設定しました。

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

しかし、私はフックを使用して次のようにするこのチュートリアルを読んだところadmin_initです...

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

admin_initフックを使用してこれを実行したのは初めてです。

質問

後者の方法(を使用admin_init機能しますが...

  • これは好ましい方法ですか?(つまり、より最適化されていますか?)
  • 同じ結果を達成するためのちょうど異なる方法、または
  • メタボックスを追加するための悪い方法?(もしそうなら、なぜですか?)

4
このリストをご覧ください:codex.wordpress.org/Plugin_API/Action_Reference-早すぎず、遅すぎない限り、どれを使用してもかまいません。直感的で予測可能なフックを使用するのが最善であるためadd_meta_boxes、推奨されます。
ポール

@ポール素晴らしい。これを回答として投稿できますか?
寝台車

3
同意された、私は単にチュートリアルの作者が気付いていなかったと思うadd_meta_boxes"add_meta_boxes_$post_type"さらに細かい制御も可能です。
ブラソフィロ2013

回答:


4

このリストを見てくださいhttp : //codex.wordpress.org/Plugin_API/Action_Reference

  1. 早すぎず、遅すぎない限り、どちらを使用してもかまいません。直感的で予測可能なフックを使用するのが最善であるためadd_meta_boxes、推奨されます。WordPressはいつの日か何かを変更する可能性があり、最も適切なフックを使用することで、コードが今後も機能する可能性が高まります。
  2. 私にはそれについて考えることができる一つの例外があります。場合によっては(発生する可能性が非常に低い場合)、たとえば、管理者であるログインしたユーザーに対してのみアクションフックでadd_theme_support()一般的に使用される呼び出しが必要になることがありますがafter_setup_theme、このフックではまだこの情報にアクセスできません。そのため、おそらく代わりにset_current_userまたはinitアクションフックを使用する必要があります(それが安全かどうかを調査した後)。

3

他にもいくつかのフックがあります:

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

そしてその直後に実行:

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

メタボックスを実際に登録するフック/コールバック内からさまざまな中止チェックを実行する場合は、実行時に\WP_Screenオブジェクトが入力されないため、上記のいずれかを使用しadmin_initます。

より一般的なadd_meta_boxesフックを使用した場合は、その最初の引数に対してチェックできます。

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

    add_meta_box( /* etc. */ );
}

投稿が少なくとも一度保存されていない限り、メタボックスを追加したくない場合は、

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

等々。結論:物事を絞り込むには、上記のフックを使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.