Сохранение квоты Страна выставления счета и доставки ELSE присваивает местоположение на основе IP (геолокации) - PullRequest
0 голосов
/ 29 апреля 2019

Информация:

Версия WooCommerce: 3.6.2

Версия WordPress: 5.1.1

YITH WooCommerce Запрос цитаты премии от YITH -2.1.7


Цель:

Если клиент проверяет с помощью Предложения, сохраните страну выставления счета и доставки, установленную с помощью Предложения, иначе ограничьтестрана, использующая геолокацию

Если это помогает, URL-адрес котировки, отправленный клиенту, выглядит следующим образом: mysite / request-quote /? request_quote = 330 & status = принято & raq_nonce = ad5c139f3d7a59993a4ff679d84de3a3 & lang


* 10Моя попытка кода

// GeoIP Country
add_filter( 'woocommerce_checkout_fields' , 'vals_woo_checkout_country' );
function vals_woo_checkout_country( $fields ) {
//check if Billing & Shipping is ALREADY set, if yes use it
if (isset($_POST['billing_country'])) {
$billing_country  = WC()->customer->get_country();
$shipping_country = ! empty( WC()->customer->get_shipping_country()  )  ? WC()->customer->get_shipping_country() : $billing_country;
}
//If not set then use geolocation to set
else
//Only in Checkout and in Order Pay
if ( (is_checkout()) && (is_wc_endpoint_url('order-pay') )) {
            $geoData = WC_Geolocation::geolocate_ip();
            $Geocountries = WC()->countries->get_countries();
            $fields['billing']['billing_country'] = array(
                'type' => 'select',
                'label'     => __('Country', 'woocommerce'),
                'options' => array(
                    $geoData['country'] => $Geocountries[$geoData['country']]
                ),
                'class' => array(
                    'form-row-wide',
                    'address-field',
                    'update_totals_on_change'
                )
            );
            $fields['shipping']['shipping_country'] = array(
                'type' => 'select',
                'label'     => __('Country', 'woocommerce'),
                'options' => array(
                    $geoData['country'] => $Geocountries[$geoData['country']]
                ),
                'class' => array(
                    'form-row-wide',
                    'address-field',
                    'update_totals_on_change'
                )
            );
}
            return $fields;
        }
function remove_checkout_optional_fields_label_script() {
    // Only on checkout page
    if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return;

    $optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
    ?>
    <script>
    jQuery(function($){
        // On "update" checkout form event
        $(document.body).on('update_checkout', function(){
            $('#billing_country_field label > .optional').remove();
    $('.woocommerce-checkout #billing_country_field').css('pointer-events', 'none');
            $('#shipping_country_field label > .optional').remove();
    $('.woocommerce-checkout #shipping_country_field').css('pointer-events', 'none');
        });
    });
    </script>
    <?php
}
add_filter( 'wp_footer' , 'remove_checkout_optional_fields_label_script' );
//end code

Обновление 03 / май / 2019

Этот код НЕ работает.

Любая помощь в этомприветствуется.

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Я наконец обдумал это и нашел другое решение.

Часть 1 - Настройки Под Woocommerce -> Настройки -> Общие -> Местоположение клиента по умолчанию = Geolocate Woocommerce setting

Часть 2 - Код Код находится в файле function.php вашей активной дочерней темы (или активной темы).

function remove_checkout_optional_fields_label_script() {
    // Only on checkout page
    if( ! ( is_checkout() && ! is_wc_endpoint_url() ) ) return;
    $optional = '&nbsp;<span class="optional">(' . esc_html__( 'optional', 'woocommerce' ) . ')</span>';
    ?>
    <script>
    jQuery(function($){
        // On "update" checkout form event remove option to select countries
        $(document.body).on('update_checkout', function(){
            $('#billing_country_field label > .optional').remove();
    $('.woocommerce-checkout #billing_country_field').css('pointer-events', 'none');
            $('#shipping_country_field label > .optional').remove();
    $('.woocommerce-checkout #shipping_country_field').css('pointer-events', 'none');
        });
    });
    </script>
    <?php
}
add_filter( 'wp_footer' , 'remove_checkout_optional_fields_label_script' );

Это работает для меня сейчас. Буду очень признателен, если кто-нибудь сможет предложить лучшее решение.

0 голосов
/ 29 апреля 2019

function wpse_287199_woo_checkout_country( $fields ) {
    $geoData = WC_Geolocation::geolocate_ip();
    $countries = WC()->countries->get_countries();

    $fields['billing']['billing_country'] = array(
        'type' => 'select',
        'label'     => __('Country', 'woocommerce'),
        'options' => array(
            $geoData['country'] => $countries[$geoData['country']]
        ),
        'class' => array(
            'form-row-wide',
            'address-field',
            'update_totals_on_change'
        )
    );

    $fields['shipping']['shipping_country'] = array(
        'type' => 'select',
        'label'     => __('Country', 'woocommerce'),
        'options' => array(
            $geoData['country'] => $countries[$geoData['country']]
        ),
        'class' => array(
            'form-row-wide',
            'address-field',
            'update_totals_on_change'
        )
    );

    return $fields;
}
add_filter( 'woocommerce_checkout_fields' , 'wpse_287199_woo_checkout_country' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...