まず結論。

カスタム投稿タイプを扱う管理画面を作成するときに、投稿タイプ名ごとに処理を分けるアクションフックは、

add_meta_boxes_{$custom_post_type_name}

を用いると良さそうだ。(良い! と、断言できるまでは調査していません。。。)

カスタム投稿タイプを作成しつつ、疑問になったことで(あまりスマートではないやり方で)調べたこと。

まず、現在扱ってる投稿タイプを知るには

function get_post_type()

を使います。get や post のクエリ値から調べる方法も無きにしも非ずですが、コアシステムがそれを担保してくれてるわけでもなさそうなので、ここは素直にしたいところ。

さて、管理画面中に投稿タイプ別にCSSやjavascriptを投稿タイプ別に挿入したい場面に出くわしたのですが、なんでもかんでも挿入しまくっちゃうと、ヘッダが大変なことになって嫌です。特にjavascriptは必要最小限のものしかロードしたくないですよね。

で、そのためには今扱っている投稿タイプを知りたいんだけど、少なくともアクションフック’admin_print_styles’, ‘admin_print_scripts’よりも早くなくちゃいけない。でも ‘admin_init’ だと、コアのほうではまだ投稿の取得がなされていないとかでなかなか微妙な状況。

それらしい記事を検索したのですけど見当たらず、しかたないので function do_action の中にデバッグコードを挿入して確認。

function do_action($tag, $arg = '') {
	echo "<span style='color:red'>{$tag}</span> : " . get_post_type() . "<br />";

すると、こんな具合にコードが吐き出された。ちなみに、’my-profile’というのがこのとき扱っているカスタム投稿タイプ名です。

(前略)
admin_menu :
deprecated_argument_run :
deprecated_argument_run :
admin_init :
load-post.php :
admin_action_edit :
update_post_meta : my-profile
updated_post_meta : my-profile
posts_selection : my-profile
dbx_post_advanced : my-profile
add_meta_boxes : my-profile
add_meta_boxes_my-profile : my-profile
do_meta_boxes : my-profile
do_meta_boxes : my-profile
do_meta_boxes : my-profile
admin_xml_ns : my-profile
admin_enqueue_scripts : my-profile
admin_print_styles-post.php : my-profile
admin_print_styles : my-profile
admin_print_scripts-post.php : my-profile
(後略)

ここで、フックの候補は ‘update_post_meta’ から ‘admin_xml_ns’ までの7種類のどれかにする必要があることがわかりました。

同様の調査を、今度は「新規作成」で行ったところ、上述の7種のうち、’update_post_meta’, ‘posts_selection’ の2種類はコールされていません。

で、結局どれにしようか迷ったのですが、’add_meta_boxes_my-profile’  というフックは、カスタム投稿タイプの名前ごとに動的に作成されるものなので、これを用いれば、自前のスクリプト側の分岐の作業がスマートにできそうです。とりあえず、今のところは問題なく動いてる模様。

課題は、どのようなアクションあるいはフェーズにおいても必ずこのフックがコールされるのか。それを知るためにはもう少しコアについて調べなければなりません。

とにかく、カスタム投稿タイプが搭載されたおかげで、管理画面のカスタマイズがとても容易になってうれしい。ようやく最近WordPressが好きになってきました。