Альтернативный способ упорядочить сгруппированный дочерний продукт продукта, так как фильтр woocommerce_grouped_children_args был удален из WooCommerce 3

В Wordpress Woocommerce я создал сгруппированный продукт с большим количеством субпродуктов (детей). Я пробовал искать везде, но я не могу найти рабочего решения, как упорядочить их с помощью SKU или названия продукта. Кажется, что orderby генерируется только "Order Menu". Хотя, поскольку у меня есть 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;

 }

Я также искал Google для объяснений, но не смог найти. Я попытался очистить переходные процессы, это тоже не работает:

  WooCommerce>System Status>Tools>Clear Transients

Сгруппированный продукт можно увидеть на https://plastmet.ee/uus/toode/umartoru-kork-zzo-pealekaiv/. Таблица html должна соответствовать детям ниже, но это не так. SKU для детей - "563/9005", "567/9005" и т.д.

Любая помощь будет принята с благодарностью!

Ответ 1

Надеюсь, я правильно понял проблему:

Если мы переопределили файл шаблона single-product/add-to-cart/grouped.php, мы могли бы использовать, например:

if( $grouped_products )
    usort( $grouped_products, 'wc_products_array_orderby_title' );

для сортировки сгруппированных продуктов по названию, а не по умолчанию для меню.

Мы также можем отменить регистрацию:

add_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 );

с пользовательским обратным вызовом.

В качестве последнего средства можно переопределить функцию 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,
       ) );
    }
  }
}

где можно, например, вместо этого используйте wc_products_array_orderby_title.