我在建一个taxonomy->child taxonomy
下拉列表,其中子项仅在选择父项时才处于活动状态。除了我使用的wp_dropdown_categories
对于父项,我得到的值是所选项的ID,而不是slug或name。
出于这个原因,我正在使用一个自定义的助行器来获取名称,而且效果很好。我的问题是,因为我现在正在使用这个助行器,我无法获取所选家长的ID来激活子下拉列表。
wp_dropdown_categories(array(
\'show_count\' => 1,
\'selected\' => 0,
\'hierarchical\' => 1,
\'depth\' => 1,
\'hide_empty\' => 0,
\'tab_index\' => $tabindex,
\'class\' => \'gt-select\',
\'show_option_none\' => \'Select Product\',
\'name\' => \'cat\',
\'id\' => \'my-product\',
\'taxonomy\' => \'products\',
\'walker\' => new Walker_CategoryDropdown_Custom(),
));
子分类代码为:
$cat_id = sanitize_text_field($_POST[\'cat\']);
$cat_query = "child_of={$cat_id}&hide_empty=0&taxonomy=products";
$categories = get_categories($cat_query);
$options = \'<option value="-1">Select Color</option>\';
foreach ($categories as $cat) {
$name = $cat->name;
$value = $cat->term_id;
$label = "{$cat->cat_name} ({$cat->category_count})";
$options .= "<option value=\\"{$name}\\" data-value=\\"{$value}\\">{$label}</option>";
}
$return = array(
\'options\' => $options,
);
使用自定义Walker的问题是,现在不再在此处获取id:
$cat_id = sanitize_text_field($_POST[\'cat\']);
我得到了父类名称或slug,如果我把walker去掉,一切都很好,但是
wp_dropdown_categories()
将在类别中插入ID号为的新记录,而不是更新现有记录。
我在这里添加自定义助行器仅供参考:
class Walker_CategoryDropdown_Custom extends Walker_CategoryDropdown
{
function start_el(&$output , $category , $depth , $args)
{
$pad = str_repeat(\' \' , $depth * 3);$cat_name = apply_filters(\'list_cats\' , $category->name , $category);
$output .= "\\t<option class=\\"level-$depth\\" value=\\"" . $category->name . "\\" data-value=\\"" . $category->term_id . "\\"";
if ( $category->term_id == $args[ \'selected\' ] ) $output .= \' selected="selected"\';
$output .= \'>\';
$output .= $pad . $cat_name;
if ( $args[ \'show_count\' ] ) $output .= \' (\' . $category->count . \')\';
if ( array_key_exists(\'show_last_update\', $args) && $args[ \'show_last_update\' ] ) {
$format = \'Y-m-d\';
$output .= \' \' . gmdate($format , $category->last_update_timestamp);
}
$output .= "</option>\\n";
}
}
输出值为:
value=\\"" . $category->name . "\\"
父类别在数据库中自我更新效果很好,但子类别下拉列表不会填充。
如果我在助行器中将此更改为:
value=\\"" . $category->term_id . "\\"
子类别将填充,但父类别不会更新,它将以ID号作为标签插入自己作为新记录。
基本上,我需要找到一种方法从wp_dropdown_categories()
在这里传递:
$cat_id = sanitize_text_field($_POST[\'cat\']);