web-dev-qa-db-ja.com

1つの機能に複数のカスタム分類法を登録することは可能ですか?

私は私の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 );           
1
codeview

いや。少なくともWordPressのやり方ではありません。

ラベル配列のインスタンスを構築するために、おそらくヘルパー関数(言い換えればplain PHP realm)を作ることができますが、それは文字列を翻訳可能にすることを真剣に妨げます。

1
Rarst

実行時にそれらすべての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配列の一部をオーバーライドすることもできます。

がんばろう!

0
Aaron Ransley