在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;
}
我还搜索了Google的解释,但找不到任何解释。我试图清除瞬态,这不起作用:
WooCommerce>System Status>Tools>Clear Transients
可以在https://plastmet.ee/uus/toode/umartoru-kork-zzo-pealekaiv/上看到分组的产品。 html表应与下面的子项匹配,但事实并非如此。儿童SKU是“563/9005”,“567/9005”等。
非常感谢任何帮助!
答案 0 :(得分: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
。