如何选择一个父类别,并在另一个选择中显示子类别以供选择?

时间:2020-02-03 作者:Seba Lagos

如何选择父类别并在另一个选择中显示要选择的子类别?

这是代码(父分类法)

<select>
<option value=""><?php esc_html_e(\'Selecciona País\', \'eltd-tours\'); ?></option>
        <?php 
            //Listado de taxonomias por país
            $tax_terms = get_terms(array(
            \'taxonomy\' => \'tipo_pais\',
            \'hide_empty\' => false,
            \'hierarchical\' => true,
            \'orderby\'    => \'parent\',
            \'fields\' => \'all\',
            \'parent\' => \'0\',                    ) );
            foreach ($tax_terms as $tax_term) {?>
            <option value=""><?php echo $tax_term->name;?></option>
        <?php }?>

</select>
我需要分类子代码,请帮助!

1 个回复
SO网友:Antti Koskinen

如果我正确理解你,你想要两个selects、 一个用于父术语,另一个用于子术语,将根据父选择动态填充。正当

首先,您需要select 元素。

<select name="parent_term">
  <option value=""><?php esc_html_e(\'Selecciona País\', \'eltd-tours\'); ?></option>
  <?php echo implode( \'\', my_select_options( my_parent_tax_terms(\'tipo_pais\') ) ); ?>
</select>

<select name="child_term"></select>
下面是我用来让html看起来更干净的助手函数。

function my_parent_tax_terms( string $taxonomy ) {
  $terms = get_terms(array(
    \'taxonomy\'     => $taxonomy,
    \'hide_empty\'   => false,
    \'hierarchical\' => true,
    \'orderby\'      => \'parent\',
    \'fields\'       => \'all\',
    \'parent\'       => \'0\',
  ) );
  return ( $terms && is_array($terms) ) ? $terms: array();
}

function my_select_options( array $terms ) {
  $out = array();
  foreach ($terms => $term) {
    $out[] = sprintf(
      \'<option value="%d">%s</option>\',
      $term->term_id,
      $term->name
    );
  }
  return $out;
}
然后将事件侦听器添加到父项select 让它填充子术语select 当父选择更改时。您可以使用jQuery或普通javascript来实现这一点。

jQuery(document).on(\'ready\', function(){
  // populate child term select, when parent selection changes
  jQuery(\'select[name="parent_term"]\').on(\'change\', function(){
    // get child terms select element
    var $child_select = jQuery(\'select[name="child_term"]\');
    // clear any previous options
    jQuery($child_select).empty();
    // get new options
    var $child_options = get_child_terms_from_admin_ajax_or_WP_REST_or_localized_script();
    // loop options to append them to the child select
    for (i = 0; i < $child_options.length; i++) {
      jQuery($child_select).append(`<option value="${$child_options[i].value}">${$child_options[i].name}</option>`);
    }    
  });  
});
请注意,子术语需要来自某个地方。这可能是遗产admin-ajax, 更加现代WP REST API, 或者,您甚至可以使用父项及其子项创建一个大型配置数组,然后使用wp_localize_script().

相关推荐

Categories manage

我正在尝试向CPT中添加特定类别,只有在添加新帖子时,您才能看到与这些帖子类型相关的类别。此外,我希望能够从后端添加类别,而不是从代码添加类别,因为我有很多类别将要更改。如果有一个插件可以做到这一点,那很好,但我也希望了解它是如何做到的。非常感谢