我正在尝试制作一个自定义产品分类选项,其中排除了 POA 产品,客户这样做是因为没有为它们设置价格。
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );
function custom_woocommerce_get_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
if ('price_nopoa_asc' == $orderby_value) {
$args = array(
'meta_key' => '_price',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_compare' => '!=',
'meta_value' => '',
'meta_type' => 'numerical',
);
}
return $args;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['price_nopoa_asc'] = 'Sort by Price: products Low to High';
return $sortby;
}
除了忽略没有定价的产品之外,其他一切都有效。我是否以错误的方式检查空字段?
答案 0 :(得分:0)
试试下面的代码:
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );
function custom_woocommerce_get_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
if ('price_nopoa_asc' == $orderby_value) {
$args = array(
'meta_key' => '_price',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => '_price', # add your key here for comparison
'compare' => '!=',
'value' => '' # if the empty string didn't work, try changing it to zero
);
);
);
}
return $args;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['price_nopoa_asc'] = 'Sort by Price: products Low to High';
return $sortby;
}