由于过滤器`woocommerce_grouped_children_args`从WooCommerce 3中删除,因此对分组产品子进行排序的替代方法

Mas*_*tto 10 php wordpress woocommerce

在Wordpress Woocommerce中,我创建了一个分组产品,其中包含许多子产品(子产品).我尝试到处搜索,但我找不到一个可行的解决方案,如何通过SKU或产品名称来订购它们.似乎它的orderby仅由"菜单顺序"生成.虽然由于我在这些多个分组产品中有30多个子产品,但是按照菜单顺序值来订购它们将非常浪费时间.

我尝试了以下代码,但似乎它在WC 2.5中有效,但不是3.0+.

add_filter( 'woocommerce_grouped_children_args', 
'so_22661392_grouped_children_args' );

function so_22661392_grouped_children_args( $args ){

 $args['meta_key'] = 'sku';
 $args['orderby'] = 'meta_value';
 $args['order'] = 'ASC'; 
 return $args;

 }
Run Code Online (Sandbox Code Playgroud)

我还搜索了谷歌的解释,但找不到任何解释.我试图清除瞬态,这不起作用:

  WooCommerce>System Status>Tools>Clear Transients
Run Code Online (Sandbox Code Playgroud)

可以在https://plastmet.ee/uus/toode/umartoru-kork-zzo-pealekaiv/上查看分组的产品.html表应与下面的子项匹配,但事实并非如此.儿童SKU是"563/9005","567/9005"等.

任何帮助将不胜感激!

bir*_*ire 3

希望我正确理解这个问题:

如果我们覆盖了模板文件single-product/add-to-cart/grouped.php,那么我们可以使用例如:

if( $grouped_products )
    usort( $grouped_products, 'wc_products_array_orderby_title' );
Run Code Online (Sandbox Code Playgroud)

按标题对分组的产品进行排序,而不是默认的菜单顺序。

我们还可以取消注册:

add_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 );
Run Code Online (Sandbox Code Playgroud)

而是使用自定义回调。

作为最后的手段,人们可以覆盖该woocommerce_grouped_add_to_cart()功能(例如在插件中)以更改菜单顺序。

它的定义为:

if ( ! function_exists( 'woocommerce_grouped_add_to_cart' ) ) {

   function woocommerce_grouped_add_to_cart() {
       global $product;

       $products = array_filter( array_map( 'wc_get_product', $product->get_children() ) );

       if ( $products ) {
            usort( $products, 'wc_products_array_orderby_menu_order' );

       wc_get_template( 'single-product/add-to-cart/grouped.php', array(
           'grouped_product'    => $product,
           'grouped_products'   => $products,
           'quantites_required' => false,
       ) );
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

例如可以使用的地方wc_products_array_orderby_title