サポート » 使い方全般 » add_meta_box関数で複数のメタボックスを設置したい

  • 解決済 Toshimichi Mimoto

    (@mimosafa)


    いつもお世話になっております。
    初めてフォーラムで質問をさせていただきます。

    add_meta_box関数ではひとつしかメタボックスの設置はできないのでしょうか?

    【やりたいこと】
    カスタム投稿タイプ「event」で管理画面に以下のメタボックス(2個)を設置したい。
    ・イベント基本情報
    ・試合情報

    【試みた実装】
    functions.php

    // カスタム投稿タイプ"event"
    add_action( 'init', 'event_custom_post_type' );
    function event_custom_post_type() {
        $labels = array(
            'name' => 'イベント情報',
            // 以下略
        );
        $args = array(
            'labels' => $labels,
            'public' => true,
            'query_var' => true,
            'rewrite' => true,
            'capability_type' => 'post',
            'hierarchical' => false,
            'menu_position' => 5,
            'has_archive' => true,
            'supports' => array(
                'title',
            ),
            'register_meta_box_cb' => 'mmsf_meta_box_event'
        );
        register_post_type( 'event', $args );
    }
    // メタボックスの追加
    function mmsf_event_default_info() { // …①
        add_meta_box(
            'mmsf_meta_box',
            'イベント設定',
            'mmsf_meta_box_event_inner',
            'event',
            'normal',
            'high'
        );
    }
    function mmsf_meta_box_event_inner( $post ) {
        // メタボックの内容
    }
    function mmsf_event_match_info() { // …②
        add_meta_box(
            'mmsf_meta_box',
            '試合情報',
            'mmsf_meta_box_match_info_inner',
            'event',
            'normal',
            'high'
        );
    }
    function mmsf_meta_box_match_info_inner( $post ) {
        // メタボックの内容
    }
    // カスタム投稿タイプ"event"のコールバック関数
    function mmsf_meta_box_event() {
        mmsf_event_default_info();
        mmsf_event_match_info();
    }

    コールバックに指定した関数にそれぞれのメタボックスを設置する関数の処理を含めれば思い通りの実装ができると思っていましたが、上記の場合だと2番めに処理される”mmsf_event_match_info()”しか処理されていない様子でした。
    メタボックスの追加①②を削除して以下のように変更しても同様に2番めのadd_meta_boxしか実行されませんでした。

    function mmsf_meta_box_event() {
        add_meta_box(
            'mmsf_meta_box',
            'イベント設定',
            'mmsf_meta_box_event_inner',
            'event',
            'normal',
            'high'
        );
        add_meta_box(
            'mmsf_meta_box',
            '試合情報',
            'mmsf_meta_box_match_info_inner',
            'event',
            'normal',
            'high'
        );
    }

    なおかつ、カスタム投稿タイプ”event”の定義時の
    'register_meta_box_cb' => 'mmsf_meta_box_event'
    を削除し、①②の関数を記述した上で、以下のように記述をしましたが同様でした。(やはり2番めに呼び出された関数しか処理されません。)

    add_action( 'admin_menu', 'mmsf_event_default_info' );
    add_action( 'admin_menu', 'mmsf_event_match_info' );

    WordPressのカスタマイズ、PHPの経験は浅く、まったく見当違いのことをしているかもしれません。もしそうであればその旨もご指摘、解決策のご教示をいただければ幸いです。

    【環境】
    WordPress 3.5.1
    PHP 5.2.17
    さくらレンタルサーバー

    宜しくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    add_meta_box の最初のパラメーターは、IDとして利用されるので重複不可です。

    トピック投稿者 Toshimichi Mimoto

    (@mimosafa)

    jim912さま

    ありがとうございます!
    無事2つのメタボックスが設置できました。
    HTML IDを軽く見ていました。。考えを改めなければいけませんね。

    本件について解決済みとさせて頂きます。

    ところで、add_meta_boxを実行するのにregister_meta_box_cbで関数を呼び出すのと
    add_actionでアクションを追加する場合で本質的な違いは有るのでしょうか?

    前者の場合、カスタム投稿タイプの定義上で関数を呼び出しているのにadd_meta_boxの
    $post_typeパラメーターでポストタイプの指定が必要なのでなにかスッキリしません。
    register_meta_box_cbを利用するメリットがいまいちわからないのです。。

    素朴な疑問でした。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「add_meta_box関数で複数のメタボックスを設置したい」には新たに返信することはできません。