Intereting Posts
Ссылки на WordPress условного входа Действия, выполняемые при администрировании Редактирование загрузки страницы после отправки сообщений Почему настройка постоянных ссылок влияет на страницы? Как заказывать сообщения по убыванию числа комментариев на странице таксономии? переадресация пароля переадресация на страницу входа в систему Таблица пользовательских сообщений Как получить популярные теги Как WooCommerce хранит продукты / изменения продукта? / Бесплатный скрипт для импорта вариаций продукта? Пользовательская конечная точка и X-WP-TotalPages (заголовки) Крючок на генераторе Добавление терминов таксономии на основе пользовательского поля Как получить ссылку на все категории Исключить категорию из поданной в списке comments_popup_link () – как загружать разные классы / изображения в соответствии с условиями разных комментариев? Как использовать Twig + Timber с несколькими циклами на основе значения мета-ключа

Как получить категорию slug из wp_dropdown_categories

Я настраиваю плагин. Мне нужно было показать список категорий в иерархии, в котором я работал со всеми функциями плагина. Я использую wp_dropdown_categories , но я хотел бы отображать список категорий в качестве их пули, а не как их имена категорий. Какие-либо предложения?

Вот что я до сих пор:

 function replace_id_for_slug( $option ) { $categories = get_categories( "hide_empty=0" ); preg_match( '/value="(\d*)"/', $option[0], $matches ); $id = $matches[1]; $selectID = $nextItem; $slug = get_cat_slug( $id ); foreach ( $categories as $category ) { if ( $category->cat_ID == $id ) { } } return preg_replace( "/value=\"(\d*)\"/", "value=\"$slug\"", $option[0] ); } $select = wp_dropdown_categories( "hierarchical=1&hide_empty=0&echo=0&name=field_$nextItem&id=$selectID&class=categoriesBox" ); echo $select; 

Я забыл упомянуть, что это для бэкэнда администратора. Я пробовал играть с классом ходок, но я в недоумении. Знаете ли вы, что это может быть достигнуто?

Solutions Collecting From Web of "Как получить категорию slug из wp_dropdown_categories"

Существует аргумент walker для wp_dropdown_categories() . Он принимает экземпляр пользовательского ходока, класс, расширяющий Walker_CategoryDropdown или общий Walker .

Давайте создадим такой класс. Мы должны изменить только один метод.

 class WPSE_Cat_Slug_Walker extends Walker_Category { function start_el( &$output, $category, $depth, $args, $id = 0 ) { $pad = str_repeat('&nbsp;', $depth * 3); $output .= "\t<option class=\"level-$depth\" value=\"".$category->term_id."\""; if ( $category->term_id == $args['selected'] ) $output .= ' selected="selected"'; $output .= '>'; $output .= $pad.$category->slug; // The Slug! if ( $args['show_count'] ) $output .= '&nbsp;&nbsp;('. $category->count .')'; $output .= "</option>\n"; } } 

Теперь мы создаем экземпляр нашего класса …

 $wpse_cat_slug_walker = new WPSE_Cat_Slug_Walker; 

… и передать его в раскрывающийся список:

 $select = wp_dropdown_categories( array ( 'hierarchical' => 1, 'hide_empty' => 0, 'echo' => 0, 'name' => "field_$nextItem", 'id' => $selectID, 'class' => 'categoriesBox', 'walker' => $wpse_cat_slug_walker // the walker ) ); 

Заметьте, это совершенно непроверено, просто идея показать вам направление. 🙂

Я сделал по-другому и прекрасно работал. Надеюсь, это тоже поможет:

 <?php wp_dropdown_categories( 'taxonomy=my_taxonomy&value_field=slug' ); ?> <script type="text/javascript"> <!-- var dropdown = document.getElementById("cat"); function onCatChange() { if ( dropdown.options[dropdown.selectedIndex].value != -1 ) { location.href = "<?php echo esc_url( home_url( '/' ) ); ?>category/"+dropdown.options[dropdown.selectedIndex].value; } } dropdown.onchange = onCatChange; --> </script> 

Ниже приведена обновленная версия ответа, предоставленная @toscho, протестированная и работающая с WP 4.1.1.

 class FGW_Cat_Slug_Walker extends Walker_CategoryDropdown{ public function start_el(&$output, $category, $depth = 0, $args = array(), $id = 0){ $pad = str_repeat('&nbsp;', $depth * 3); // Create the padding (before nested terms) /** Generate the HTML for this option */ $output.= sprintf("\t". '<option class="%1$s" value="%2$s" %3$s>%4$s%5$s</option>', /** %1$s - 'class' attribute */ 'level-' . $depth, /** %2$s - 'value' attribute */ $category->slug, /** %3$s - 'selected' attribute */ ($category->slug == $args['selected']) ? ' selected="selected"' : '', /** %4$s - option text */ $category->name, /** %5$s - The term count */ ($args['show_count']) ? '&nbsp;&nbsp;(' . $category->count . ')' : '' ); } }