因为tag
查询变量期望值为术语slug。它将寻找slug“15”这个词(可能不存在)。
是的,这很令人沮丧wp_dropdown_categories()
使用ID作为值,而不是slug。这是因为它最初只用于类别(通常使用ID而不是SLUG),而不是一般的分类法。
然而,有this ticket on it. 我已经创建了this gist, 可以让你wp_dropdown_categories()
使用slug而不是id作为值。
供参考(插件中应包含以下类):
/*
* 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(\' \', $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 .= \' (\'. $category->count .\')\';
$output .= "</option>\\n";
}
}
使用
$args=array(
\'walker\'=> new SH_Walker_TaxonomyDropdown(),
\'value\'=>\'slug\',
....
);
wp_dropdown_categories($args);
“value”参数是可选的。对于类别,默认值为“id”,对于其他分类,默认值为“slug”。