在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)放置在“产品类别”过滤器之后。
产品管理员:
答案 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文件中。经过测试,可以正常工作。
答案 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;
}