Вы должны попытаться изменить последний оператор if
. Возможно, вам придется использовать $key => $value
здесь:
add_action( 'woocommerce_before_calculate_totals', array( $this, 'add_custom_price'),22, 1);
public function add_custom_price( $cart) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Avoiding hook repetition (when using price calculations for example)
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;
// Loop through cart items
foreach ( $cart->get_cart() as $key => $item ) {
$item['data']->set_price( 40 );
}
}
Кроме того, похоже, что это в классе. Попробуйте переместить это из вашего класса в файл функций. php и обновите хук действия:
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 22, 1);
Если он работает в файле функций. php, то вы нужно посмотреть, как создается экземпляр вашего класса, особенно если он вызывается с опозданием.
Редактировать: LoicTheAzte c обнаружен неверный счетчик аргументов, поэтому ответ обновляется, чтобы отразить это.