В WooCommerce я установил разные способы доставки , , но один из них должен быть эксклюзивным для компаний.
Для этого я использую следующий код:
add_filter( 'woocommerce_package_rates', array( $this, 'package_rates' ), 10, 2 );
public function package_rates( $rates, $package ) {
$company_rate_id = 'flat_rate:7';
if(!empty(WC()->customer->get_billing_company())){
$company_rates = $rates[ $company_rate_id ];
$rates = array( $company_rate_id => $company_rates );
}else{
unset( $rates[ $company_rate_id ] );
}
return $rates;
}
Решение работает, но только если биллинговая компания уже существует и сохранена в базе данных. Поэтому, если клиент обновляет эту информацию на странице оформления заказа, она не работает.
A Возможное решение - сохранить это поле в реальном времени (billing_company).
Я попробовал следующую функцию:
add_filter( 'woocommerce_checkout_fields' , 'trigger_update_checkout_on_change' );
function trigger_update_checkout_on_change( $fields ) {
$fields['billing']['billing_company']['class'][] = 'update_totals_on_change';
return $fields;
}
Это обновляет способ доставки, проблема в том, что поле не сохраняется в базе данных, и функция package_rates()
не может найти его в реальном времени.