如果使用自定义查看器,如何获取选定的分类或类别ID?

时间:2014-10-16 作者:r3b3l

我在建一个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\']);

1 个回复
SO网友:Courtney Ivey

也许仅仅用它来工作比反对它更容易。。。

而不是:

$cat_id = sanitize_text_field($_POST[\'cat\']);
尝试:

$cat_name = sanitize_text_field( $_POST[\'cat\'] );
$cat = get_term_by( \'name\', $cat_name, \'category\' );
$cat_id = $cat->term_id;

结束

相关推荐

GET_CURRENT_USER_ID()返回0?

我正在尝试在WordPress中获取当前登录用户的id。我使用了以下代码:function users_list() { global $current_user; $current_user = wp_get_current_user(); echo \'User ID: \' . $current_user->ID ; print_r($current_user); } 上述代码返回空结果,如下所示:W