wake-up-neo.com

Kann man mehrere benutzerdefinierte Taxonomien in einer Funktion registrieren?

Ich registriere 7 benutzerdefinierte Taxonomien in meiner functions.php. Da jede Funktion dieselben Bezeichnungen und Argumente verwendet und demselben benutzerdefinierten Beitragstyp zugeordnet ist, frage ich mich, ob es möglich ist, alle Taxonomien in einer Funktion zu registrieren. Hier ist der Code, der siebenmal wiederholt wird, wobei der <XXX> der einzige sich ändernde Teil ist:

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

Nee. Zumindest nicht so wie bei WordPress.

Sie könnten wahrscheinlich die Hilfsfunktion (mit anderen Worten: einfaches PHP) zum Erstellen von Instanzen von Label-Arrays verwenden, was jedoch die Übersetzung von Strings ernsthaft behindern würde.

1
Rarst

Ich würde versuchen, eine Wrapping-Funktion zu erstellen, die zur Laufzeit Werte für alle diese XXX's liefern kann. Hier ist ein grobes, ungetestetes Beispiel:

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)

Sie müssten die Implementierung hier abschließen, aber die Idee ist, die Anzahl der erforderlichen Parameter auf ein Minimum zu beschränken und gleichzeitig das gesamte $labels-Array mit den entsprechenden Werten zu füllen.

Möglicherweise akzeptiert die Funktion build_and_register_custom_taxonomy 8 Argumente oder nur die drei oder vier.

Sie können auch Teile des $args-Arrays überschreiben, indem Sie die Argumente der übergeordneten build_and_register_custom_taxonomy-Funktion nach Bedarf übergeben.

Viel Glück!

0
Aaron Ransley