【问题标题】:Woocommerce order by custom callback function通过自定义回调函数进行 Woocommerce 订单
【发布时间】:2016-06-21 16:02:57
【问题描述】:

我向 Woocommerce 添加了一个新的排序选项,它将按最低价格排序。我所有的价格以及其他一些序列化数据都存储在自定义属性中。我想要的是有一个回调函数来反序列化这些数据,检查最低价格并按该价格排序。

我看到的每篇关于自定义排序选项的帖子都使用 woocommerce_get_catalog_ordering_args 过滤器将 orderby 参数添加到 WP_Query,但我还没有看到任何通过回调函数对返回的查询结果进行排序的方法。

有什么方法可以实现吗?我正在根据名称查看woocommerce_after_product_ordering,但找不到太多关于它的信息。任何帮助将不胜感激!

function my_woocommerce_product_sorting($orderby) {
    $orderby['price_asc'] = "Sort by cheapest";
    $orderby['price_desc'] = "Sort by most expensive";

    return $orderby;
}
add_filter("woocommerce_catalog_orderby", "my_woocommerce_product_sorting", 20);

【问题讨论】:

  • WooCommerce 已经按价格排序,包括升序和降序。 “我的所有价格都存储在自定义属性中”是什么意思?为什么价格不存储在 _price 元数据中?据我所知,没有办法通过回调函数对查询结果进行排序。查询根据orderorderby 参数对自身进行排序。

标签: wordpress woocommerce


【解决方案1】:

我认为,当您使用单独的新元键(例如 wooocommerce 商店产品价格)在帖子元名称 _price 中存储自定义价格并使用数字价格值时,这将是最佳解决方案。

mysql order by serialized data?

当你分开存储时,它会改变 wp 查询参数,如:

function my_woocommerce_get_catalog_ordering_args( $args ){

    $order_by = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : $args['orderby'];

    if( $order_by == 'price_desc' || $order_by == 'price_asc' ){ // Check match to custom filter

      $args['orderby']  = "meta_value_num ID";
      $args['order']    = $order_by == 'price_desc' ? 'DESC' : 'ASC';
      $args['meta_key'] = '_my_custom_price'; // Put your price custom post meta price key name     

    }

    return $args;
}

add_filter( 'woocommerce_get_catalog_ordering_args', 'my_woocommerce_get_catalog_ordering_args' );

【讨论】:

  • 这不是我想要的解决方案,但这是我最终选择的解决方案,没有更好的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2020-08-21
  • 2020-01-07
  • 2021-09-13
  • 1970-01-01
  • 2021-07-05
相关资源
最近更新 更多