#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