在Woocommerce Admin产品列表中的产品类别过滤器之后添加自定义分类过滤器

时间:2018-12-12 22:40:29

标签: php wordpress woocommerce wp-admin

在woocommerce店面子主题中,我添加了一些分类法。现在,我想为这些自定义分类法添加一些类别过滤器。 我已使用此代码添加了这样的过滤器(来源:Rodolfo 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

2 个答案:

答案 0 :(得分:0)

  

重要说明:

     
      
  • wc_product_dropdown_categories()函数的输出在默认情况下是回显的,并且在总是返回所有已过滤数据的过滤器挂钩中并不方便,因此我们将使用参数'echo'设置为false。 / li>   
  • 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

答案 1 :(得分:0)

我从LoicTheAztec那里得到了很多帮助,基本上使用了他的大部分代码,但是看来我们不能轻易地用 wp_dropdown_categories 代替 wc_product_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;
}