Почему идентификаторы в URL-адресах не работают, но слизняки?

Я потерян, я не понимаю, почему это работает

http://website.com/?tag=my-cat-slug 

и не

 http://website.com/?tag=15 

Это действительно раздражает, потому что wp_dropdown_categories() только предоставляет идентификаторы как значения.

Я попытался изменить постоянные ссылки на настройки по умолчанию вместо перезаписи:

 http://website.com/?p=123 

Но ничего не изменилось

Solutions Collecting From Web of "Почему идентификаторы в URL-адресах не работают, но слизняки?"

Потому что переменная запроса tag ожидает значения в терминах slug. Он будет искать термин с slug '15' (который, по-видимому, не существует).

И, да, его довольно разочаровывает то, что wp_dropdown_categories() использует идентификатор как значение, а не пул. Это связано с тем, что оно первоначально использовалось только для категорий (для которых обычно используются идентификаторы, а не пули), в отличие от общих таксономий.

Однако на этом есть этот билет . Я создал этот метод , который может позволить вам использовать wp_dropdown_categories() использования значения slugs, а не идентификаторов.

Для справки (следующий класс должен войти в плагин):

 /* * A walker class to use that extends wp_dropdown_categories and allows it to use the term's slug as a value rather than ID. * * See http://core.trac.wordpress.org/ticket/13258 * * Usage, as normal: * wp_dropdown_categories($args); * * But specify the custom walker class, and (optionally) a 'id' or 'slug' for the 'value' parameter: * $args=array('walker'=> new SH_Walker_TaxonomyDropdown(), 'value'=>'slug', .... ); * wp_dropdown_categories($args); * * If the 'value' parameter is not set it will use term ID for categories, and the term's slug for other taxonomies in the value attribute of the term's <option>. */ class SH_Walker_TaxonomyDropdown extends Walker_CategoryDropdown{ function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ){ $pad = str_repeat('&nbsp;', $depth * 3); $cat_name = apply_filters('list_cats', $category->name, $category); if( !isset($args['value']) ){ $args['value'] = ( $category->taxonomy != 'category' ? 'slug' : 'id' ); } $value = ($args['value']=='slug' ? $category->slug : $category->term_id ); $output .= "\t<option class=\"level-$depth\" value=\"".$value."\""; if ( $value === (string) $args['selected'] ){ $output .= ' selected="selected"'; } $output .= '>'; $output .= $pad.$cat_name; if ( $args['show_count'] ) $output .= '&nbsp;&nbsp;('. $category->count .')'; $output .= "</option>\n"; } } 

Применение

 $args=array( 'walker'=> new SH_Walker_TaxonomyDropdown(), 'value'=>'slug', .... ); wp_dropdown_categories($args); 

Параметр «значение» необязательный. Значение по умолчанию будет «id» для категорий и «slug» для других таксономий.