2017-06-19 41 views
11

在Wordpress Woocommerce中,我创建了一个分组产品,其中包含大量子产品(子项)。我试着到处搜索,但我无法找到一个工作解决方案如何通过SKU或产品名称来订购它们。看来它是orderby仅由“Menu Order”生成的。虽然我在这些多个分组产品中有30多个子产品,但通过Menu Order值对它们进行排序会非常浪费时间。从wooCommerce中删除过滤器`woocommerce_grouped_children_args`的其他排序方式3

我试过下面的代码,但它似乎在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; 

} 

我也搜索了谷歌的解释,但找不到任何。我试图清除瞬变,这并不工作,以及:

WooCommerce>System Status>Tools>Clear Transients 

的组合产品可以在https://plastmet.ee/uus/toode/umartoru-kork-zzo-pealekaiv/可见。 html表格应该与下面的孩子相匹配,但它不会。儿童SKU为“563/9005”,“567/9005”等。

任何帮助将不胜感激!

+0

该过滤器已从3.0中删除且未记录。在GitHub上打开一个问题。 https://github.com/woocommerce/woocommerce/issues – Christina

+0

我贴了一些东西,你也应该:https://github.com/woocommerce/woocommerce/pull/7021#issuecomment-309538320打开新票 – Christina

+0

任何添加方式此命令通过筛选代码同时? – Masqtto

回答

2

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

如果我们重写了模板文件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

+0

谢谢。这个被删除的过滤器在被添加到WooCommerce中时会被详细描述,然后它将被无​​证并在没有窥视的情况下被移除以替换它。分组产品是产品单页上带有儿童产品的主要产品。 https://github.com/woocommerce/woocommerce/issues/8820 – Christina

+0

我想正确的方法是对开发者使用弃用通知,例如, ['apply_filters_deprecated'](https://developer.wordpress.org/reference/functions/apply_filters_deprecated/)。你在寻找方式来订购'$ grouped_products'数组吗?我查看了动态的'woocommerce_product_get_children'过滤器(我用'get_prop()'方法在类的内部发现了深层过滤器;-),但它仅在'$ grouped_products'的wc_products_array_orderby_menu_order命令之前应用。 @Christina – birgire

+0

如果没有关于此的文档,请联系开发人员。他们以非常及时的方式回答。 – Shawn