添加自定义分类过滤器Woocommerce管理的产品清单产品类别过滤器后,

问题描述 投票:-1回答:2

在我woocommerce店面子主题,我增加了一些分类。现在,我想补充一些类别过滤器的自定义分类。我已经加入这样使用此代码过滤器(来源:鲁道夫Melogli)

add_filter( 'woocommerce_product_filters', 'admin_filter_products_by_din' );
function admin_filter_products_by_din( $output ) {

  global $wp_query;

  $output .= wc_product_dropdown_categories( array(
    'show_option_all' => 'All DIN/ISO/ANSI',
    'taxonomy' => 'din-iso-ansi',
    'name' => 'din-iso-ansi',
    'order' => 'ASC',
    'tab_index' => '2',
    'selected' => isset( $wp_query->query_vars['din-iso-ansi'] ) ? $wp_query->query_vars['din-iso-ansi'] : '',
  ) );

  return $output;
}

新的类别过滤器的显示器,但现在我想我的新的分类过滤器(DIN / ISO / ANSI)的放置产品类别过滤器后走了。

产品管理:

product admin

php wordpress woocommerce wp-admin
2个回答
0
投票

重要笔记:

  • wc_product_dropdown_categories()功能输出默认情况下呼应,并在过滤器钩在那里总是返回的所有过滤的数据不方便,所以我们将使用参数'echo'设置为false
  • wc_product_dropdown_categories()功能其实wp_dropdown_categories()这样更方便,而不是为像您这样的自定义分类使用。

要测试你的代码,我已经使用product_tag Woocommerce自定义分类,以确保它的工作原理。

下面的代码将在您的自定义过滤器下拉刚过产品类别过滤器:

add_filter( 'woocommerce_product_filters', 'admin_filter_products_by_din' );
function admin_filter_products_by_din( $output ) {
    global $wp_query;

    $taxonomy      = 'din-iso-ansi';
    $selected      = isset( $wp_query->query_vars[$taxonomy] ) ? $wp_query->query_vars[$taxonomy] : '';
    $info_taxonomy = get_taxonomy($taxonomy);

    $custom_dropdown = wp_dropdown_categories(array(
        'show_option_none' => __("Select a {$info_taxonomy->label}"), // changed
        'taxonomy'         => $taxonomy,
        'name'             => $taxonomy,
        'order'            => 'ASC',
        'echo'             => false, // <== Needed in a filter hook
        'tab_index'        => '2',
        'selected'         => $selected,
        'show_count'       => true,
        'hide_empty'       => true,
    ));

    $after = '<select name="product_type"'; // The start of the html output of product type filter dropdown.

    $output = str_replace( $after, $custom_dropdown . $after, $output );

    return $output;
}

代码放在您的活动子主题的function.php文件(或活动主题)。测试和工程。

enter image description here


0
投票

我想通了这一点与很多来自LoicTheAztec的帮助下,基本上是使用他的大部分代码,但现在看来,我们不能wc_product_dropdown_categories替代wp_dropdown_categories那么容易。回顾wc_product_dropdown_categories功能的化妆后,我实现了另一种方式来避免这一功能通过一个小PHP的方式呼应出来的结果。

add_filter( 'woocommerce_product_filters', 'admin_filter_products_by_din' );
function admin_filter_products_by_din( $output ) {

    global $wp_query;

    $taxonomy  = 'din-iso-ansi';
    $selected      = isset( $wp_query->query_vars[$taxonomy] ) ? $wp_query->query_vars[$taxonomy] : '';
    $info_taxonomy = get_taxonomy($taxonomy);

    ob_start(); // buffer the result of wc_product_dropdown_categories silently
    wc_product_dropdown_categories( array(
        'show_option_none' => __("Select a {$info_taxonomy->label}"), // changed
        'taxonomy'         => $taxonomy,
        'name'             => $taxonomy,
        //'echo'             => false, // <== Needed for in filter hook
        'tab_index'        => '2',
        'selected'         => $selected,
        'show_count'       => true,
        'hide_empty'       => true,
    ));
    $custom_dropdown = ob_get_clean();


    $before = '<select name="product_type"'; //

    $output = str_replace( $before, $custom_dropdown . $before, $output );

    return $output;
} 
© www.soinside.com 2019 - 2024. All rights reserved.