私は私のfunctions.phpに7カスタム分類法を登録しています。各関数は同じラベルと引数を使用し、同じカスタム投稿タイプにアタッチされているため、1つの関数にすべての分類法を登録することが可能かどうかと思いませんか。これは、<XXX>
を唯一の変更部分として7回繰り返されているコードです。
function custom_taxonomy_<XXX> () {
$labels = array(
'name' => '<XXX>',
'singular_name' => '<XXX>',
'menu_name' => '<XXX>s',
'all_items' => 'All <XXX>s',
'parent_item' => 'Parent <XXX>',
'parent_item_colon' => 'Parent <XXX>:',
'new_item_name' => 'New <XXX> Name',
'add_new_item' => 'Add New <XXX>',
'edit_item' => 'Edit <XXX>',
'update_item' => 'Update <XXX>',
'separate_items_with_commas' => 'Separate <XXX> with commas',
'search_items' => 'Search <XXX>s',
'add_or_remove_items' => 'Add or Remove <XXX>s',
'choose_from_most_used' => 'Choose from the most used <XXX>s',
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'query_var' => true,
);
register_taxonomy( '<XXX>', 'custom_post_type', $args );
}
add_action( 'init', 'custom_taxonomy_<XXX>', 0 );
いや。少なくともWordPressのやり方ではありません。
ラベル配列のインスタンスを構築するために、おそらくヘルパー関数(言い換えればplain PHP realm)を作ることができますが、それは文字列を翻訳可能にすることを真剣に妨げます。
実行時にそれらすべてのXXX's
に値を提供できるラッピング関数を作成しようとします。これは大まかな、テストされていない例です。
function build_and_register_custom_taxonomy($taxonomy_name, $taxonomy_menu_name, $priority) {
$definition = function($taxonomy_name) {
$labels = array(
'name' => $taxonomy_name,
'singular_name' => $taxonomy_name,
'menu_name' => "${taxonomy_menu_name}"
// etc...
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'query_var' => true,
);
register_taxonomy($taxonomy_name, 'custom_post_type', $args );
}
add_action('init', $definition, $priority);
}
build_and_register_custom_taxonomy('news_item', 'News Items', 0)
ここで実装を完了する必要がありますが、$labels
配列全体に適切な値を設定しながら、必要なパラメータの数を最小限に抑えることが目的です。
build_and_register_custom_taxonomy
関数が8つの引数、あるいはたぶん3つか4つの引数を受け入れることになるかもしれません。
必要に応じて、親の$args
関数から引数を渡して、build_and_register_custom_taxonomy
配列の一部をオーバーライドすることもできます。
がんばろう!