Intereting Posts
Заголовки уже отправили ошибку с плагином экспорта CSV Настройка двух отдельных блогов при использовании WordPress в качестве CMS Удалите кнопку «Get Shortlink» в администраторе настраиваемого типа сообщения Проблема сортировки с функцией query_posts в wordpress. Сортировка по настраиваемому полю не работает Представления Google Analytics публикуются в WordPress? Проверьте правильность имени пользователя в пользовательской форме входа Как разрешить определенной роли, такой как Contributor, иметь возможность просматривать только ожидающие комментарии и одобрять их? Передача пользовательских аргументов в paginate_links Обновление с 3.2.1 до текущего Сохранить значение флажка в плагине Извлечение instagram api не работает над wordpress Как создать опцию «импортировать фиктивные данные» в пользовательском плагине WordPress Перемещение медиа-библиотеки Сортировка пользовательских почтовых запросов WordPress не работает Нет сообщений для отображения – Custom Post Type show_ui

Использовать интерфейс тегов для иерархической таксономии?

Пользовательские таксономии великолепны. Я зарегистрировал кучу новых таксономий и написал импортера для импорта нашей иерархической таксономии в WordPress a la XML. Проблема заключается в том, что одна таксономия насчитывает около 1100 терминов, а просмотр контрольного списка в 1100 случаев – жестокое и необычное наказание.

Есть ли способ иметь иерархическую таксономию, но вместо этого использовать интерфейс тегов (поле поиска с автозаполнением)?

Обновление: этот код из ответа Bainternet получает большую часть пути (добавляет интерфейс тега для указанной таксономии, с рабочим автозаполнением и правильно заполненным «наиболее используемым» облаком тегов), но условия не сохраняются при сохранении сообщения. Если у должности были условия раньше, они будут удалены при сохранении. Поэтому я все еще ищу ответ. (Этот же код сохраняет условия просто отлично, если таксономия зарегистрирована с hierarchichal установленным на false, но точка вопроса заключается в использовании интерфейса тега в иерархической таксономии.)

 //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="<?php echo $tax_name; ?>"> <div class="jaxtag"> <div class="nojs-tags hide-if-js"> <p><?php echo $taxonomy->labels->add_or_remove_items; ?></p> <textarea name="<?php echo "tax_input[$tax_name]"; ?>" rows="3" cols="20" class="the-tags" id="tax-input-<?php echo $tax_name; ?>" <?php echo $disabled; ?>><?php echo get_terms_to_edit( $post->ID, $tax_name ); // textarea_escaped by esc_attr() ?></textarea> </div> <?php if ( current_user_can($taxonomy->cap->assign_terms) ) { ?> <div class="ajaxtag hide-if-no-js"> <label class="screen-reader-text" for="new-tag-<?php echo $tax_name; ?>"><?php echo $taxonomy->labels->name; ?></label> <div class="taghint"><?php echo $taxonomy->labels->add_new_item; ?></div> <p><input type="text" id="new-tag-<?php echo $tax_name; ?>" name="newtag[<?php echo $tax_name; ?>]" class="newtag form-input-tip" size="16" autocomplete="off" value="" /> <input type="button" class="button tagadd" value="<?php esc_attr_e('Add'); ?>" tabindex="3" /></p> </div> <p class="howto"><?php echo esc_attr( $taxonomy->labels->separate_items_with_commas ); ?></p> <?php } ?> </div> <div class="tagchecklist"></div> </div> <?php if ( current_user_can($taxonomy->cap->assign_terms) ) { ?> <p class="hide-if-no-js"><a href="#titlediv" class="tagcloud-link" id="link-<?php echo $tax_name; ?>"><?php echo $taxonomy->labels->choose_from_most_used; ?></a></p> <?php } } 

Оригинальный вопрос заимствован на форуме WordPress здесь .

Solutions Collecting From Web of "Использовать интерфейс тегов для иерархической таксономии?"

Вот как я это сделал. Просто добавьте условие, которое проверяет, является ли загружаемая страница административной страницей или нет. Если это страница администратора, установите для иерархического значения значение false, иначе установите иерархическое значение true. Вот так:

 $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); 

Это должно дать вам эту идею. Недостатком этого является то, что вы не можете добавлять родительские отношения к терминам с помощью интерфейса администратора. Вы можете получить более конкретный параметр is_admin() например, посмотреть, содержит ли запрос post-new.php или post.php

Единственный способ, который я нашел, – удалить метабокс по умолчанию и создать свой собственный, вот код, который я использовал:

 //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"' : ''; ?> <div class="tagsdiv" id="<?php echo $tax_name; ?>"> <div class="jaxtag"> <div class="nojs-tags hide-if-js"> <p><?php echo $taxonomy->labels->add_or_remove_items; ?></p> <textarea name="<?php echo "tax_input[$tax_name]"; ?>" rows="3" cols="20" class="the-tags" id="tax-input-<?php echo $tax_name; ?>" <?php echo $disabled; ?>><?php echo get_terms_to_edit( $post->ID, $tax_name ); // textarea_escaped by esc_attr() ?></textarea> </div> <?php if ( current_user_can($taxonomy->cap->assign_terms) ) { ?> <div class="ajaxtag hide-if-no-js"> <label class="screen-reader-text" for="new-tag-<?php echo $tax_name; ?>"><?php echo $box['title']; ?></label> <div class="taghint"><?php echo $taxonomy->labels->add_new_item; ?></div> <p><input type="text" id="new-tag-<?php echo $tax_name; ?>" name="newtag[<?php echo $tax_name; ?>]" class="newtag form-input-tip" size="16" autocomplete="off" value="" /> <input type="button" class="button tagadd" value="<?php esc_attr_e('Add'); ?>" tabindex="3" /></p> </div> <p class="howto"><?php echo esc_attr( $taxonomy->labels->separate_items_with_commas ); ?></p> <?php } ?> </div> <div class="tagchecklist"></div> </div> <?php if ( current_user_can($taxonomy->cap->assign_terms) ) { ?> <p class="hide-if-no-js"><a href="#titlediv" class="tagcloud-link" id="link-<?php echo $tax_name; ?>"><?php echo $taxonomy->labels->choose_from_most_used; ?></a></p> <?php } } 

Что касается сохранения, вам не нужно беспокоиться об этом, WordPress делает это за вас.

Обновление , я просто тестировал его по категориям, и он отлично работает:

введите описание изображения здесь

Я думаю, мы можем добавить скрытый ввод, который извлекает term_id выбранного тега через jQuery (AJAX) и сохраняет его в качестве термина post, используя функцию wp_set_object_terms .

Я задал еще один вопрос, относящийся к этой проблеме: родной тег WP предлагает метабокс. Как он обрабатывает идентификатор тега?