Как сделать поля для выставления счетов при оформлении заказа доступными только для чтения в Woo Commerce

#php #wordpress #woocommerce #checkout #billing

Вопрос:

У нас есть веб-сайт для заказов, которые затем доставляются. Теперь дело в том, что мы хотим использовать данные для выставления счетов по адресу моей учетной записи в качестве адреса для отправки, при оформлении заказа мы хотим, чтобы они были заполнены из того, что там есть, но не позволяли пользователю вносить какие-либо изменения в форму выставления счетов на странице выписки.

Этот код:

 add_action('woocommerce_checkout_fields','customization_readonly_billing_fields',10,1);
function customization_readonly_billing_fields($checkout_fields){
    $current_user = wp_get_current_user();;
    $user_id = $current_user->ID;
    foreach ( $checkout_fields['billing'] as $key => $field ){
        if($key == 'billing_address_1' || $key == 'billing_address_2'){
            $key_value = get_user_meta($user_id, $key, true);
            if( strlen($key_value)>0){
                $checkout_fields['billing'][$key]['custom_attributes'] = array('readonly'=>'readonly');
            }
        }
    }
    return $checkout_fields;
}
 

Только часть адреса не может быть изменена, однако все остальное, начиная с имени, фамилии, мобильного телефона и т.д., Может быть изменено.

Нам нужно, чтобы все эти поля были заблокированы точно так же, как этот код заблокировал поле адреса только для чтения.

Ответ №1:

Вы можете удалить if($key == 'billing_address_1' || $key == 'billing_address_2'){ эту строку из всех полей. проверьте код белого.

 add_action('woocommerce_checkout_fields','customization_readonly_billing_fields',10,1);
function customization_readonly_billing_fields($checkout_fields){
    $current_user = wp_get_current_user();
    $user_id = $current_user->ID;
    foreach ( $checkout_fields['billing'] as $key => $field ){
        $key_value = get_user_meta($user_id, $key, true);
        if( $key_value != '' ){
            if( $key == 'billing_country' || $key == 'billing_state' || $key == 'billing_suburb' ){
                $checkout_fields['billing'][$key]['custom_attributes'] = array('disabled'=>'disabled');
            }else{
                $checkout_fields['billing'][$key]['custom_attributes'] = array('readonly'=>'readonly');
            }
        }
    }
    return $checkout_fields;
}
 

Для billing_country , billing_state и billing_suburb , вы должны передать значение в скрытом, потому что выпадающий список выбрать отключен, значение параметра не передается при нажатии кнопки разместить заказ, и для решения этой проблемы мы можем добавить скрытые поля с нашим значением.

 add_action('woocommerce_after_order_notes', 'billing_countryand_state_hidden_field');
function billing_countryand_state_hidden_field($checkout){
    $current_user = wp_get_current_user();
    $user_id = $current_user->ID;
    echo '<input type="hidden" class="input-hidden" name="billing_country"  value="'.get_user_meta($user_id, 'billing_country', true).'">';
    echo '<input type="hidden" class="input-hidden" name="billing_state"  value="'.get_user_meta($user_id, 'billing_state', true).'">';
    echo '<input type="hidden" class="input-hidden" name="billing_suburb"  value="'.get_user_meta($user_id, 'billing_suburb', true).'">';

}
 

Протестировано и работает

введите описание изображения здесь

Комментарии:

1. Большое вам спасибо! Это почти идеально, единственное, что он не блокирует, — это выпадающий список выбора, можно ли это заблокировать ?

2. Я обновил свой ответ.

3. Все еще раскрывающийся список представляет себя, используя штат и пользовательский, называемый пригородом.

4. можете ли вы поделиться ссылкой на свой сайт?

5. Конечно, foodline.co.za