使用 woocommerce_order_get_items 过滤器钩子操作项目名称

With woocommerce_order_get_items filter hook manipulate items name

在 WooCommerce 中,我试图弄清楚如何删除 () 如果订单行项目名称有这些括号。

这是一些代码:

$order = wc_get_order($order_id)
foreach ( $order->get_items() as $order_item ){
   //...enter code here
}

但我想使用过滤器挂钩,因为我无法访问上面的 foreach 循环。我试图添加到 functions.php 所以当 get_items() 调用时,过滤器将准备数据数组。

代码如下:

add_filter( 'woocommerce_order_get_items', 'filter_woocommerce_order_get_items', 10, 2 ); 
function filter_woocommerce_order_get_items($items, $instance){
    foreach ($items as $item){
        $search = array('å','ä','ö','(', ')');
        $replace = array('a','a','o', '', '');
        $item['name'] = str_replace($search, $replace, $item['name']);
    }

    return $items;
}

所以,长话短说:
$order->get_items()调用时可以准备数据吗?

谢谢

您使用正确的过滤器挂钩的方向是正确的,但实际上您的自定义挂钩函数不起作用,因为缺少某些东西。

要使其正常工作,您需要在 $items 数组中用新值替换旧值,然后再返回它。因此,您的代码中缺少的元素是 $item_id key.

我对你的代码做了一些小改动:

add_filter( 'woocommerce_order_get_items', 'filter_woocommerce_order_get_items', 10, 2 );
function filter_woocommerce_order_get_items($items, $instance){
    foreach ($items as $item_id => $item_values){

        $search = array('å','ä','ö','(', ')');
        $replace = array('a','a','o', '', '');

        $items[$item_id]['name'] = str_replace($search, $replace, $item_values['name']);
    }
    return $items;
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。

代码已经过测试并且有效。