web-dev-qa-db-fra.com

Possible d'enregistrer plusieurs taxonomies personnalisées dans une fonction?

J'enregistre 7 taxonomies personnalisées dans mon functions.php. Étant donné que chaque fonction utilise les mêmes étiquettes et arguments et est attachée au même type de publication personnalisée, je me demande s’il est possible d’enregistrer toutes les taxonomies dans une fonction? Voici le code qui est répété 7 fois avec le <XXX> comme seule pièce changeante:

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

Nan. Pas la façon dont WordPress au moins.

Vous pourriez probablement créer une fonction d'assistance (tout simplement PHP royaume) pour créer des instances de tableaux d'étiquettes, ce qui empêcherait sérieusement de rendre les chaînes traduisibles.

1
Rarst

Je voudrais essayer de créer une fonction de wrapping qui peut fournir des valeurs pour tous ces XXX's au moment de l'exécution. Voici un exemple approximatif et non testé:

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)

Vous devez terminer la mise en œuvre ici, mais l’idée est de réduire au minimum le nombre de paramètres nécessaires tout en remplissant le tableau $labels complet avec les valeurs appropriées.

Vous pouvez vous retrouver avec la fonction build_and_register_custom_taxonomy en acceptant 8 arguments, ou peut-être simplement les trois ou quatre.

Vous pouvez également remplacer des parties du tableau $args en transmettant les arguments de la fonction parent build_and_register_custom_taxonomy si nécessaire.

Bonne chance!

0
Aaron Ransley