ワイヤード・パンチ

元・大阪人が、岡山の山奥でも生きていけることを証明するためのブログ。

WordPressでadd_meta_boxを複数使うとき、何個も関数を用意せずに済む方法。

WordPressでカスタム投稿タイプを追加し、管理画面上にカスタムフィールドの入力欄を作るときは、add_meta_boxを使います。

カスタムフィールドのボックスごとに、そこに表示させる内容を決める関数を指定するのですが、他のphpを読むような処理にしている場合、そのためだけに何個も関数を用意するのは煩わしいです。

よって、コードを長くせずに複数の入力ボックスを作れるような処理を考えたいと思います。

広告

修正前のコード。

最初に貼った写真の場合だと、ボックスは2つあります。よって、add_meta_boxは二回実行されます。

また、そのボックスに表示させる内容は、別のphpを読んでその内容を表示させています。

function shiritori_add_customfield_box() {
	add_meta_box("summary", "基本設定", "shiritori_add_customfield_area_summary", "shiritori");
	add_meta_box("cards", "カード", "shiritori_add_customfield_area_cards", "shiritori");
}
add_action("admin_menu", "shiritori_add_customfield_box");

function shiritori_add_customfield_area_summary() {
	get_template_part("customfield/summary");
}

function shiritori_add_customfield_area_cards() {
	get_template_part("customfield/cards");
}

しかし上記のように、ただ1つの命令を実行するためだけに、わざわざ関数を別々に用意するのは、もったいなく感じませんか

かといって、add_meta_boxの第三引数は、関数名を入れるところであって、処理は直接書き込めません。

修正後のコード。

function shiritori_add_customfield_box() {
	$meta = [
		"summary" => "基本設定",
		"cards" => "カード",
	];
	foreach($meta as $key => $value) {
		add_meta_box($key, $value, "shiritori_add_customfield_area", "shiritori", "", "", $key);
	}
}
add_action("admin_menu", "shiritori_add_customfield_box");

function shiritori_add_customfield_area($output, $key) {
	$key = $key["args"];
	get_template_part("customfield/" . $key);
}

add_meta_boxには、第7引数で処理先の関数に、引数を渡すことができます。

そして、処理先の関数の第2引数で、渡された引数を受け取ることができます。

よって、同じ関数を使いながらも、渡された値によって、読み込みたいphpを変えればいいのです。

なお、渡された値は配列になるので、中身を取り出しましょう。