【问题标题】:Display subcategory dropdown on Woocommerce subcategory pages [closed]在 Woocommerce 子类别页面上显示子类别下拉列表 [关闭]
【发布时间】:2020-08-17 12:53:24
【问题描述】:

我正在使用 Display sub subcategories terms list on WooCommerce subcategory archive pages 回答我上一个问题的代码,以便在我的 Woocommerce 商店的父类别页面上显示我的子类别

现在我希望它显示为下拉列表(最好是 select2 下拉列表,像 其他 WooCommerce 下拉列表),而不是普通链接。

我知道我可以使用wc_product_dropdown_categories(),但是如何将主要父子类别页面上的子子类别显示为下拉列表?

【问题讨论】:

  • “下拉菜单”是什么意思?您是指下拉菜单还是<select> 表单输入?
  • 一个选择下拉菜单,理想情况下是一个 select2 下拉菜单,就像其他 Woocommerce 下拉菜单一样,比如 country-select。
  • 那么我建议你先阅读 select2 的文档:select2.org/getting-started/basic-usage 这真的很简单
  • 另外,<select> 输入是表单输入,而不是导航。如果我的问题是正确的,那么您基本上需要<option> 标签中的<a> 标签。这是行不通的。您可以使用 CSS 将 <ul class="subcategories-list"> 标记设置为下拉菜单。这将是一个更好的方法
  • @LoicTheAztec 是的,你可以,但 OP 的问题中没有任何内容表明他使用的是 JS 或 XMLHttpRequest。我在这里说的是 HTML……<select><form> 之外在语义上没有意义

标签: php wordpress woocommerce jquery-select2 taxonomy-terms


【解决方案1】:

以下是自定义简码,将显示链接的子子类别术语列表的Select2 下拉列表

注意:Select2 库 (和样式) 默认情况下不会在 WooCommerce 存档页面上加载。因此,此短代码中包含使用来自 CDN 的外部链接,并且仅在子类别中加载。

如果您愿意,可以使用 WordPress 排队推荐的方式将其替换为 WooCommerce 中包含的文件。

代码:

add_shortcode('wc_subcat_dropdown', 'wc_sub_subcategories_dropdown');
function wc_sub_subcategories_dropdown( $atts ) {
    // Shortcode attribute (or argument)
    extract( shortcode_atts( array(
        'taxonomy' => 'product_cat',
        'obj_id'   => '0',
    ), $atts, 'wc_subcat_dropdown' ) );

    if ( $obj_id > 0 ) :
        $obj = new WP_Term( (int) $obj_id );
    else :
        $obj = get_queried_object();
    endif;

    if ( is_a($obj, 'WP_Term') && $taxonomy === $obj->taxonomy && 0 != $obj->parent ) :
        // Get sub-subcategories of the current subcategory
        $terms = get_terms([
            'taxonomy'    => $taxonomy,
            'hide_empty'  => true,
            'parent'      => $obj->term_id
        ]);
    endif;

    if ( isset($terms) && ! empty($terms) ) :

    ob_start(); // Start buffering

    // Select2 CSS - Can be removed and replaced
    echo '<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet" />';

    echo '<select name="product_cat" id="'.$taxonomy.'" class="dropdown_'.$taxonomy.'">
        <option value="">'.__("Select a subcategory","woocommerce").'</option>';

    // Loop through product subcategories WP_Term Objects
    foreach ( $terms as $term ) {
        echo '<option value="'. $term->slug .'">'. $term->name .'</option>';
    }
    echo '</select>';

    // Select2 Script - Can be removed and replaced
    echo '<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script>';
    ?>
    <script type='text/javascript'>
    (function($) {
        $('select#<?php echo $taxonomy; ?>').select2();
        $('.dropdown_product_cat').change(function(){
            if( $(this).val() !=='' ) {
                location.href = '<?php echo home_url(); ?>/?product_cat='+$(this).val();
            }
        });
    })(jQuery);
    </script>
    <?php
    return ob_get_clean();
    endif;
}

代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。


用法:

  1. 在 WordPress 中,文本编辑器、文本小部件……(作为简码)

    [wc_subcat_dropdown]
    
  2. 在 php 代码中,就像一个模板文件,任何钩子函数……

    echo do_shortcode('[wc_subcat_dropdown]');
    

    <?php echo do_shortcode('[wc_subcat_dropdown]'); ?>
    

示例用法:

使用挂钩函数并在子类别标题下方显示下拉菜单:

add_action( "woocommerce_archive_description", "custom_sub_category_dropdown", 5 );
function custom_sub_category_dropdown(){
    echo do_shortcode('[wc_subcat_dropdown]');
}

代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。


可选的简码参数:

  • $id - 定义一个子类别词 Id (默认为当前子类别词 Id)
  • $taxonomy - 默认情况下,WooCommerce 产品类别分类法。

相关:

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 2018-12-07
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多