カスタム投稿タイプでメタボックスを設定するとき、私は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
を使う)はは動作しますが...
このリストを見てください: http://codex.wordpress.org/Plugin_API/Action_Reference
add_meta_boxes
が優先されます。将来的にはWordPressが何かを変更する可能性があり、最も適切なフックを使用することで、コードが将来も機能する可能性を高めることができます。after_setup_theme
アクションフックで一般的に使用されているadd_theme_support()
を呼び出す必要があるかもしれませんが、このフックはまだこの情報にアクセスできません。したがって、おそらく代わりにset_current_user
またはinit
アクションフックを使用する必要があります(それが安全な場合は何らかの調査を行った後)。他にもいくつかのフックがあります。
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;
等々。結論:あなたが物事を絞り込みたいのなら、上に示したフックを使ってください。