Сделайте раскрывающийся список страны оформления заказа только для чтения в Woocommerce

Я хочу, чтобы раскрывающийся список стран в woocommerce был доступен только для чтения. Изображение страны

Я уже установил в качестве страны по умолчанию австралию, но хочу, чтобы они были доступны только для чтения.


person pink widow baby    schedule 11.09.2018    source источник


Ответы (2)


Ответ Кашало правильный ... Вы также можете использовать один из нескольких других способов:

1) Только для страны выставления счета Checkout:

add_filter('woocommerce_checkout_fields', 'readdonly_billing_country_select_field');
function readdonly_billing_country_select_field( $fields ) {
    // Set billing and shipping country to AU
    WC()->customer->set_billing_country('AU');
    // Make billing country field read only
    $fields['billing']['billing_country']['custom_attributes'] = array( 'disabled' => 'disabled' );

    return $fields;
}

2) Только для страны оформления заказа и моей учетной записи:

add_filter('woocommerce_billing_fields', 'readdonly_billing_country_select_field');
function readdonly_billing_country_select_field( $fields ) {
    // Set billing and shipping country to AU
    WC()->customer->set_billing_country('AU');
    // Make billing country field read only
    $fields['billing_country']['custom_attributes'] = array( 'disabled' => 'disabled' );

    return $fields;
}

3 Для страны выставления счета и доставки Checkout:

add_filter('woocommerce_checkout_fields', 'readdonly_country_select_field');
function readdonly_country_select_field( $fields ) {
    // Set billing and shipping country to AU
    WC()->customer->set_billing_country('AU');
    WC()->customer->set_shipping_country('AU');
    // Make billing and shipping country field read only
    $fields['billing']['billing_country']['custom_attributes'] = array( 'disabled' => 'disabled' );
    $fields['shipping']['shipping_country']['custom_attributes'] = array( 'disabled' => 'disabled' );

    return $fields;
}

4) Для страны оплаты и доставки в моем аккаунте:

add_filter('woocommerce_default_address_fields', 'readdonly_country_select_field');
function readdonly_country_select_field( $fields ) {
    // Set billing and shipping country to AU
    WC()->customer->set_billing_country('AU');
    WC()->customer->set_shipping_country('AU');
    // Make country field read only
    $fields['country']['custom_attributes'] = array( 'disabled' => 'disabled' );

    return $fields;
}
person LoicTheAztec    schedule 11.09.2018
comment
Спасибо Большое .. Все работает очень хорошо - person pink widow baby; 12.09.2018
comment
Ваш код отключает поля. Поскольку отключенные поля недоступны в форме, проверка выдает ошибку проверки. Есть ли что-нибудь, что я должен добавить, чтобы исправить это, кроме ответа kashalos? - person melvin; 24.09.2019

вы можете использовать woocommerce_form_field_args, чтобы добавить отключенный атрибут в поле выбора запроса.

добавьте следующий код в свой functions.php, и вы получите желаемый результат.

add_action('woocommerce_form_field_args', 'disable_country_dropdown', 10, 3);


function disable_country_dropdown($args, $key, $value)
{
    if ($key == 'billing_country') {
        $args['custom_attributes'] = [
            'disabled' => 'disabled',
        ];
    }
    return $args;
}

проблема, когда мы отключили выбор drowpdown, значение параметра не передается, когда вы нажимаете разместить заказ, и для решения этой проблемы мы можем добавить скрытое поле с желаемым значением следующим образом:

add_action('woocommerce_after_order_notes', 'billing_country_hidden_field');

function billing_country_hidden_field($checkout)
{

    echo '<input type="hidden" class="input-hidden" name="billing_country"  value="PL">';

}

просто измените value="PL" на значение кода вашей страны, и все будет работать должным образом.

OutPut:

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

Код протестирован с помощью StorrFront Theme.

person kashalo    schedule 11.09.2018
comment
Хорошая уловка, я раньше пытался заставить его работать с ['custom_attributes'] = array ('readonly' = ›'readonly') ... но отключение - это правильный способ для поля выбора. - person LoicTheAztec; 11.09.2018
comment
@kashalo Это работает, но проблема в том, что страна, которая по умолчанию находится в Австралии, не может перейти к оформлению заказа ... Здесь указано, что страна выставления счета является обязательным полем. Пожалуйста, введите адрес, чтобы продолжить. - person pink widow baby; 12.09.2018
comment
позволь мне дважды проверить это и вернуться к тебе - person kashalo; 12.09.2018
comment
@pinkwidowbaby Я обновил свой ответ решением проблемы, пожалуйста, проверьте - person kashalo; 12.09.2018