2017-02-27 67 views
2

在WooCommerce,我試圖找出如何刪除(),如果訂單行項目名稱有那些括號。隨着woocommerce_order_get_items過濾器鉤操縱項目名稱

下面是一些代碼:

$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; 
} 

因此,TL; DR:
我可以準備數據時$order->get_items()電話?

感謝

回答

1

您是使用正確的過濾器鉤正確的方向,但實際上您的自定義掛鉤函數不一樣的東西工作丟失。

爲了使它工作,您需要在返回數組之前用數組中的新值替換數組中的新值。所以你的代碼中缺少的元素是$item_id

我有使你的代碼中的一些小變化:

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文件或也以任何插件文件。

該代碼已經過測試和工作。

+1

你好,我錯過了那部分。我正在檢查/wp-content/plugins/woocommerce/includes/abstracts/abstract-wc-order.php第1229行,但沒有注意到$ items [$ item-> order_item_id] ['name']。謝謝! – Granit