排除从低到高的价格排序中没有设置价格的woocommerce产品

时间:2021-01-25 18:22:00

标签: wordpress woocommerce

我正在尝试制作一个自定义产品分类选项,其中排除了 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;
}

除了忽略没有定价的产品之外,其他一切都有效。我是否以错误的方式检查空字段?

1 个答案:

答案 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;
}