WordPressのアクションフック「add_meta_boxes」の使い方説明

WordPressのアクションフック「add meta boxes」の使い方説明 イメージ画像

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を使わない場合は省略可能ですので以下のように書くことも出来ます。

引数を1つのみ使用する場合
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. WordPressのesc_jsの使い方解説、スクリプトのエスケープ処理 アイキャッチ
    WordPressのesc_jsの使い方解説、スクリプトのエスケープ処理
  2. WordPress記事の公開状態・下書き状態などのステータス判定方法 アイキャッチ
    WordPress記事の公開状態・下書き状態などのステータス判定方法
  3. WordPressのwpautop()自動整形でが余計に入るバグ回避方法 アイキャッチ
    WordPressのwpautop()自動整形で</p>が余計に入るバグ回避方法

PHPラボ オリジナルツール

無料配布中

当サイトの記事装飾は全てWPのオリジナルプラグインで行ってます。
インストールするとコピペで簡単に綺麗な記事が作成可能に♪
現在無料配布中・あなたのサイトも綺麗に装飾しませんか?

画像をクリックで配布ページへ
Citron WP Shortcode

承認後に表示(反映まで最長1日)

この記事へのコメントはありません。

質問・一言残していく