Verwenden Sie die Tag-Schnittstelle für hierarchische Taxonomie?

Benutzerdefinierte Taxonomien sind großartig. Ich registrierte eine Reihe neuer Taxonomien und schrieb einen Importeur, um unsere hierarchische Taxonomie in WordPress a la XML zu importieren. Das Problem ist eine Taxonomie hat etwa 1.100 Begriffe und das Durchsuchen einer Checkliste von 1.100 Dinge ist grausam und ungewöhnliche Strafe.

Gibt es eine Möglichkeit, eine hierarchische Taxonomie zu haben, sondern stattdessen das Tag-Interface (Suchfeld mit Auto-Complete) zu verwenden?

Update: Dieser Code aus der Antwort von Bainternet erhält den größten Teil des Weges (fügt die Tag-Schnittstelle für die angegebene Taxonomie hinzu, mit funktionierender Autocomplete und korrekt bevölkerter “meistgenutzter” Tag Cloud), aber die Begriffe werden nicht gespeichert. Wenn der Beitrag vorher Begriffe hatte, werden diese beim Speichern gelöscht. Ich suche immer noch nach einer Antwort. (Derselbe Code speichert Begriffe, die gut sind, wenn die Taxonomie bei hierarchichal auf false gesetzt ist, aber der Punkt der Frage ist, die Tag-Schnittstelle für eine hierarchische Taxonomie zu verwenden.)

 //remove default metabox //change TAXONOMY_NAME to your taxonomy name add_action( 'admin_menu' , 'remove_post_custom_fields' ); function remove_post_custom_fields() { remove_meta_box( 'issuediv' , 'post' , 'normal' ); } //add our custom meta box add_action( 'add_meta_boxes', 'my_add_custom_box' ); function my_add_custom_box() { add_meta_box( // 'myplugin_sectionid', 'tagsdiv-issue', __( 'New and Improved Issue Tags', 'textdomain' ), 'tags_like_custom_tax', 'post' ); } //call back function to display the metabox //change TAXONOMY_NAME to your taxonomy name function tags_like_custom_tax(){ $tax_name = 'issue'; global $post; $taxonomy = get_taxonomy($tax_name); $disabled = !current_user_can($taxonomy->cap->assign_terms) ? 'disabled="disabled"' : ''; ?> <div class="tagsdiv" id=""> 

labels->add_or_remove_items; ?>

<textarea name="" rows="3" cols="20" class="the-tags" id="tax-input-" >ID, $tax_name ); // textarea_escaped by esc_attr() ?>
cap->assign_terms) ) { ?>
<label class="screen-reader-text" for="new-tag-">labels->name; ?>
labels->add_new_item; ?>

<input type="text" id="new-tag-" name="newtag[]" class="newtag form-input-tip" size="16" autocomplete="off" value="" /> <input type="button" class="button tagadd" value="" tabindex="3" />

labels->separate_items_with_commas ); ?>

cap->assign_terms) ) { ?>

<a href="#titlediv" class="tagcloud-link" id="link-">labels->choose_from_most_used; ?>

<?php } }

Die ursprüngliche Frage ist aus dem WordPress Forum Post hier entlehnt.

Solutions Collecting From Web of "Verwenden Sie die Tag-Schnittstelle für hierarchische Taxonomie?"

Hier ist, wie ich es gemacht habe. Fügen Sie einfach eine Bedingung hinzu, die prüft, ob die geladene Seite eine Admin-Seite ist oder nicht. Wenn es sich um eine Admin-Seite handelt, setzen Sie hierarchisch auf “false”, andernfalls setzen Sie hierarchisch auf “true”. Wie so:

 $args = array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'genre' ), ) if( is_admin() ) { $args['hierarchical'] = false; } register_taxonomy('genre', array('book'), $args); 

Das sollte dir die Idee geben. Der Nachteil hierbei ist, dass Sie über die Verwaltungsschnittstelle keine übergeordneten Beziehungen zu Begriffen hinzufügen können. Sie könnten in der Bedingung is_admin() spezifischer werden, is_admin() Sie beispielsweise is_admin() , ob die Anfrage post-new.php oder post.php .

Der einzige Weg, den ich gefunden habe, ist das Entfernen der Standard-Metabox und erstellen Sie Ihre eigenen, hier ist der Code, den ich verwendet habe:

 //remove default metabox //change TAXONOMY_NAME to your taxonomy name add_action( 'admin_menu' , 'remove_post_custom_fields' ); function remove_post_custom_fields() { remove_meta_box( 'TAXONOMY_NAMEdiv' , 'post' , 'normal' ); } //add our custom meta box add_action( 'add_meta_boxes', 'my_add_custom_box' ); function my_add_custom_box() { add_meta_box( 'myplugin_sectionid', __( 'My Taxonomy Section Title', 'textdomain' ), 'tags_like_custom_tax', 'post' ); } //call back function to display the metabox //change TAXONOMY_NAME to your taxonomy name function tags_like_custom_tax(){ $tax_name = 'TAXONOMY_NAME'; global $post; $taxonomy = get_taxonomy($tax_name); $disabled = !current_user_can($taxonomy->cap->assign_terms) ? 'disabled="disabled"' : ''; ?> 

< ?php echo $taxonomy->labels->add_or_remove_items; ?>

< ?php if ( current_user_can($taxonomy->cap->assign_terms) ) { ?>
< ?php echo $taxonomy->labels->add_new_item; ?>

< ?php echo esc_attr( $taxonomy->labels->separate_items_with_commas ); ?>

< ?php } ?>
< ?php if ( current_user_can($taxonomy->cap->assign_terms) ) { ?>

< ?php echo $taxonomy->labels->choose_from_most_used; ?>

< ?php } }

Was das Speichern betrifft, brauchen Sie sich keine Sorgen zu machen, WordPress macht das für Sie.

Update , ich habe es gerade mit Kategorien getestet und es funktioniert gut:

Bildbeschreibung hier eingeben

Ich denke, wir können eine versteckte Eingabe hinzufügen, die das term_id des ausgewählten Tags über jQuery (AJAX) term_id und es als den Begriff des wp_set_object_terms speichert, indem wp_set_object_terms die function wp_set_object_terms .

Ich habe eine weitere für dieses Problem relevante Frage gestellt: WP native Tag schlägt Metabox vor. Wie verarbeitet es die Tag-ID?