
WPの add_action() などで使う「add_meta_boxes」を使った時の覚書メモです。
このフックを使うことにより投稿タイプに対してメタボックスを登録できます。
これを使う際には表示するHTMLタグを記載した関数と、データを処理する関数の2つと合わせて使用することが多いです。
詳しい使用例はカスタムボックスの作り方の記事を御覧ください。
add_meta_boxes
function adding_custom_meta_boxes($post_type, $post) {
add_meta_box(
'my-meta-box',
__( 'My Meta Box' ),
'render_my_meta_box',
'post',
'normal',
'default'
);
}
add_action('add_meta_boxes', 'adding_custom_meta_boxes', 10, 2);
$post_type と $post 2つの引数を受け取れます。
またそれに伴いadd_action()の4番目の引数で2を必ず指定しなければなりません。
$postを使わない場合は省略可能ですので以下のように書くことも出来ます。
function adding_custom_meta_boxes($post_type) {
add_meta_box(
'my-meta-box',
__( 'My Meta Box' ),
'render_my_meta_box',
'post',
'normal',
'default'
);
}
add_action('add_meta_boxes', 'adding_custom_meta_boxes');
投稿ページと固定ページの2つに追加したい場合は以下の様に書けます。
function adding_custom_meta_boxes($post_type, $post) {
$screens = ['post', 'page'];
foreach ($screens as $screen) {
add_meta_box(
'my-meta-box',
__( 'My Meta Box' ),
'render_my_meta_box',
$screen,
'normal',
'default'
);
}
}
add_action('add_meta_boxes', 'adding_custom_meta_boxes', 10, 2);
特定の投稿タイプのみに使用する場合
function adding_custom_meta_boxes($post) {
add_meta_box(
'my-meta-box',
__( 'My Meta Box' ),
'render_my_meta_box',
'post',
'normal',
'default'
);
}
add_action('add_meta_boxes_post', 'adding_custom_meta_boxes');
受け取れる引数は $post の1つだけです。
$post_type は add_action() の部分でadd_meta_boxes_{post-type}という形式で指定します。
こちらは他の投稿タイプに対して不必要なフックを作成することを防げるので、よく使われます。
投稿タイプが1つだけや、限られている場合にはこちらを使うと良いでしょう。
固定ページに追加したい場合の記載はこちら
function adding_custom_meta_boxes($post) {
add_meta_box(
'my-meta-box',
__( 'My Meta Box' ),
'render_my_meta_box',
'page',
'normal',
'default'
);
}
add_action('add_meta_boxes_page', 'adding_custom_meta_boxes');
上記2点の違い・使い分け
上記2つはどちらも同じ動作(役割)を果たします。
違う点は2点
前者が引数を2つ受け取れることに対して後者は1つ。
前者は他の投稿タイプに対して不必要なフックを作り、後者は特定の投稿タイプのみ作成可能
個人的には余計なフックを作成しないことを防げるためadd_meta_boxes_{post-type}を好んで使いたい所ですが…。
指定する投稿タイプが多いと add_meta_box() の $screen(引数) を変更しただけの関数を作成し add_action() をその都度コールしなければならないためコードが冗長になる。
ボックス情報を変更した際には全ての add_meta_box() の一部を書き直さなければならないのが面倒なため、以下の方法を好んで使っております。
おすすめの使い方
function adding_custom_meta_boxes($post_type, $post) {
switch ($post_type) {
case 'post':
case 'page':
case 'dashboard':
case 'link':
case 'attachment':
case 'custom_post_type': // カスタム投稿タイプを指定する場合はスラッグを指定して下さい
case 'comment':
add_meta_box(
'my-meta-box',
__( 'My Meta Box' ),
'render_my_meta_box',
$post_type,
'normal',
'default'
);
break;
default:
break;
}
}
add_action('add_meta_boxes', 'adding_custom_meta_boxes', 10, 2);
$post_type の引数が利用できるのですからswitchで表示したい投稿タイプの時だけ add_mata_box() が有効になる様にしております。
これなら複数の投稿タイプを指定したいときでも一つのコードで済みますし、他の投稿タイプの時に余計なフックも作成しないので安心ですね。
このコードを使う場合、不必要な投稿タイプのcaseをコメントアウトするか削除してご利用下さい。
承認後に表示(反映まで最長1日)
この記事へのコメントはありません。