Я пытаюсь написать php-код для woocommerce, который бы проверял, есть ли конкретный товар в корзине, и если это правда, то некоторые поля оформления заказа будут отключены.Что у меня сейчас:
add_action( 'woocommerce_before_checkout_form', 'find_product_in_cart' );
function find_product_in_cart() {
$product_id = 989; //product id which would trigger
$in_cart = false;
foreach( WC()->cart->get_cart() as $cart_item ) {
$product_in_cart = $cart_item['product_id'];
if ( $product_in_cart === $product_id ) $in_cart = true; // checks if the product is in cart
}
if ( $in_cart ) {
add_filter( 'woocommerce_billing_fields', 'woo_filter_state_billing');
function woo_filter_state_billing( $address_fields ) {
//sets fields to not required
$address_fields['billing_state']['required'] = false;
$address_fields['billing_country']['required'] = false;
$address_fields['billing_address_1']['required'] = false;
$address_fields['billing_city']['required'] = false;
$address_fields['billing_postcode']['required'] = false;
$address_fields['billing_phone']['required'] = false;
return $address_fields;
}
add_filter( 'woocommerce_checkout_fields' , 'disabling' );
function disabling($fields){
//hides fields
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_address_1']);
unset($fields['billing']['billing_city']);
unset($fields['billing']['billing_postcode']);
unset($fields['billing']['billing_phone']);
unset($fields['billing']['billing_country']);
unset($fields['billing']['billing_state']);
return $fields;
}
}
}
Так что проблема в том, что по какой-то причине поля остаются обязательными, даже если они скрыты.Если я вырежу целое:
add_filter( 'woocommerce_billing_fields', 'woo_filter_state_billing');
function woo_filter_state_billing( $address_fields ) {
//sets fields to not required
$address_fields['billing_state']['required'] = false;
$address_fields['billing_country']['required'] = false;
$address_fields['billing_address_1']['required'] = false;
$address_fields['billing_city']['required'] = false;
$address_fields['billing_postcode']['required'] = false;
$address_fields['billing_phone']['required'] = false;
return $address_fields;
}
и вставлю его точно так же, как в functions.php, все работает просто отлично, но это относится ко всем продуктам, и это не хорошо.Итак, как я могу заставить это работать?