Как настроить почтовый индекс для гостевого пользователя перед покупкой? WooCommerce - PullRequest
0 голосов
/ 17 ноября 2018

Я новичок в WooCommerce и недавно сделал простой шорткод для гостевых пользователей, чтобы ввести свои почтовые индексы, которые будут корректировать цены в магазине.

function set_zip() {
    $bool = is_user_logged_in();
    if($bool == false){
        echo "<div id=\"zip-check\">
            <form action=\"\" method=\"post\">
                <label for=\"zip-input\">Please enter your zip code:</label>
                <input type=\"text\" id=\"zip-input\" name=\"zip-input\" pattern=\"[0-9]{5}\" title=\"5 character zip code\">
                <input type=\"submit\">
            </form>
        </div>";
    }
}
add_shortcode( 'set_zip', 'set_zip' );

add_action( 'init', 'process_post' );
function process_post() {
    if( isset( $_POST['zip-input'] ) ) {
        $bool = is_user_logged_in();
        if($bool == false){
            $zip = $_POST['zip-input'];

            global $woocommerce;
            $woocommerce->customer->set_shipping_postcode( $zip );
            $woocommerce->customer->set_postcode( $zip );
        }
    }
}

Я знаю, что код еще не идеален, но пока он работает. Когда гость добавляет товар в свою корзину и затем вводит свой почтовый индекс, он работает отлично. Даже если он удалит товары из корзины, шорткод все равно обновит его почтовый индекс. Но когда гость вводит почтовый индекс перед добавлением продуктов в корзину, почтовый индекс не сохраняется. Почему это и как это исправить?

1 Ответ

0 голосов
/ 17 ноября 2018

Для этого вы можете проверить, пуста ли корзина или нет. Если корзина пуста, вы не разрешаете гостю вводить код. (почтовый индекс в любом случае бесполезен, если пользователь не добавил товар в корзину)

Можете ли вы попробовать следующую функцию.

add_action( 'init', 'process_post' );
function process_post() {
    if( isset( $_POST['zip-input'] ) ) {
        $bool = is_user_logged_in();
        if($bool == false){
            $zip = $_POST['zip-input'];

            global $woocommerce;
            if ( WC()->cart->get_cart_contents_count() > 0 ) {
                $woocommerce->customer->set_shipping_postcode( $zip );
                $woocommerce->customer->set_postcode( $zip );
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...