アドバンスカスタムフィールドっていうプラグインで出来ますよ。
カスタム投稿タイプ登録の際に、引数register_meta_box_cb
に任意の関数名を指定します。(下記の場合、special_post
という投稿タイプ登録時にmeta_boxes_for_mobile
という関数を指定しています。)
add_action( 'init', 'register_special_post' );
function register_special_post() {
$labels = array( /* 省略 */ );
$args = array(
'labels' => $labels,
/* 省略 */
'register_meta_box_cb' => 'meta_boxes_for_mobile'
);
register_post_type( 'special_post', $args );
}
そして指定した関数定義内でメタボックスの追加をして下さい。
function meta_boxes_for_mobile() {
add_meta_box( 'sp_post_title', /* 省略 */ );
add_meta_box( 'sp_post_content', /* 省略 */ );
}
あるいは、
add_action( 'load-post.php', 'meta_boxes_for_mobile' );
function meta_boxes_for_mobile() {
$post_id = filter_input( INPUT_GET, 'post' );
$post_type = get_post_type( $post_id );
if ( in_array( $post_type, array( 'post', 'page' ), true ) )
return;
add_meta_box( 'sp_post_title', /* 省略 */ );
add_meta_box( 'sp_post_content', /* 省略 */ );
}
前者は特定の投稿タイプのみでメタボックスを追加する方法ですね。
今回の質問にはそぐわない回答でした。。
後者の方法で条件分岐部分のコードを変えればお望みの挙動になるのではないでしょうか。
すみません。後者のコードを修正させていただきます。
add_action( 'load-post.php', 'meta_boxes_for_mobile' );
add_action( 'load-post-new.php, 'meta_boxes_for_mobile' );
function meta_boxes_for_mobile() {
if ( ! $post_type = filter_input( INPUT_GET, 'post_type' ) {
$post_id = filter_input( INPUT_GET, 'post' );
$post_type = get_post_type( $post_id );
}
if ( in_array( $post_type, array( 'post', 'page' ), true ) )
return;
add_meta_box( 'sp_post_title', /* 省略 */ );
add_meta_box( 'sp_post_content', /* 省略 */ );
}
修正前のままだと新規投稿でメタボックスが表示されません。