Intereting Posts

Как получить категорию 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 . ')' : '' ); } }