WooCommerce ограничивает загрузку продукта по стране или региону

Есть ли способ / плагин в Wordpress WooCommerce для ограничения ЗАГРУЗКИ определенного продукта в определенном регионе. Помните, что это не предполагается для всего сайта, а зависит от продукта.

Я предполагаю, что при оформлении заказа, если для продукта включены ограничения загрузки, функция извлекает текущее местоположение (страну) пользователя и сравнивает его с массивом разрешенных стран для этого продукта. Если есть совпадение, проверка продолжается, если нет, она возвращает сообщение, информирующее пользователя о том, что запрошенный продукт недоступен для загрузки в его стране. ВОПРОС: СУЩЕСТВУЕТ ТАКОЙ ПЛАГИН, ФУНКЦИЯ, ФУНКЦИЯ или СНИПЕТ, если да, то где?

ОБНОВЛЕНИЕ: Увидев, что ответа нет, я пошел дальше и начал создавать что-то самостоятельно. У меня нет предыдущего опыта работы с PHP, поэтому, пожалуйста, помогите мне сделать этот код кратким. Можешь попробовать. ЭТО ВЕРНО?

ОБНОВЛЕНИЕ (РЕШЕНИЕ): Woocommerce теперь имеет встроенную функцию, которая проверяет местоположение пользователя и сохраняет его, чтобы владелец магазина мог использовать его в настраиваемых функциях, не бойтесь этого :)

Следующий код помещается в файл functions.php вашей темы. Он добавит панель «Настройки региона» на страницу добавления / редактирования страницы вашего продукта на вкладке «Общие». У него есть два варианта: «Тип ограничения:», который может быть установлен на «Разрешить» или «Запретить», и вариант «Регионы:», где вы указываете страны, которые будут затронуты. Если настройки региона продукта не заданы, доступ к нему будет открыт для всех.

/**
 *  Mazwi WooCommerce Region Control BETA 
 * ------------------------------------
 *
 *  
 * 
 * Execute code if the user's country (set for each product) is allowed
 *
 * Author: Taf Makura
 * Thanks to Remi Corson's Tutorial 
 */


// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );

// Save Fields
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );

// Display Fields
function woo_add_custom_general_fields() {

  global $woocommerce, $post;

  echo '<div class="options_group">';

  ?>

    <?php
        // Select
            woocommerce_wp_select( 
            array( 
                'id'      => '_restriction-type', 
                'label'   => __( 'Restriction type', 'woocommerce' ), 
                'options' => array(
                'allow'   => __( 'Allow', 'woocommerce' ),
                'deny'   => __( 'Deny', 'woocommerce' ),
        )
    )
);

        // Create Textarea
            woocommerce_wp_textarea_input( 
            array( 
                'id'          => '_regions', 
                'label'       => __( 'Regions', 'woocommerce' ), 
                'placeholder' => '', 
                'desc_tip'    => 'true',
                'description' => __( 'Please enter two letter country codes. Each country code should be followed by a coma Example: ZW, AU, ZA, US ', 'woocommerce' ) 
        )
    );

  echo '</div>';
}


function woo_add_custom_general_fields_save( $post_id ){

        // Select
            $woocommerce_select = $_POST['_restriction-type'];
            if( !empty( $woocommerce_select ) )
                update_post_meta( $post_id, '_restriction-type', esc_attr( $woocommerce_select ) );


        // Textarea
            $woocommerce_textarea = $_POST['_regions'];
            if( !empty( $woocommerce_textarea ) )
                update_post_meta( $post_id, '_regions', esc_html( $woocommerce_textarea ) );

 }

Следующий код помещается в файл шаблона .php, где предполагается условное выполнение. Я могу представить, если вы разместите здесь цикл добавления в корзину (кнопка добавления в корзину), это позволит вам контролировать, какие продукты можно покупать в определенных странах. По каждому продукту.

<?php global $woocommerce; 

        // Get restriction type (deny or allow) for current product
        $restriction_type = get_post_meta( $post->ID, '_restriction-type', true );

        // Get region(s) the above restriction type is applied to 
        $regions = get_post_meta( $post->ID, '_regions', true );

        // Turns this string into an array. 
        $regions_array = (explode(',', str_replace('/\s+/','', $regions)));

        // Get users current IP location from WooCommerce 
        $base_country = (..... YOU NEED TO GET THE USER LOCATION ISO COUNTRY CODE ......)

        // If user's current IP location is either allowed, is not denied or is not set in the region settings = success
        if( $restriction_type == 'allow' && in_array($base_country , $regions_array) || $restriction_type == 'deny' && !in_array($base_country , $regions_array) || $restriction_type == '' || $regions == '' ) {

                if ($restriction_type == '' || $regions == '') {

                    //  Code to execute on success if a product is not set (NOTE: It will not be restricted)

                    echo('This product\'s region control has not been set, you can set it in WP Admin');
                }

                // Code to execute on success if a products region settings are set to allow access

                echo('YOU ARE IN'); 

        } else {

                // Code to execute when region is restricted

                echo(' you are restricted,');
        }

?>

person TafMakura    schedule 25.01.2014    source источник
comment
Вы сами ответили на свой вопрос.   -  person    schedule 25.01.2014
comment
У меня вопрос: существует ли такая вещь, плагин, функция или фрагмент и где я могу их получить?   -  person TafMakura    schedule 25.01.2014
comment
Таф (OP), вы когда-нибудь продолжали заниматься этим? Я ищу аналогичную функциональность, и мне было интересно, куда вы переходите со своим решением.   -  person inspirednz    schedule 31.08.2015
comment
Мне удалось создать настраиваемый плагин, который проверяет местоположение и удаляет кнопку добавления в корзину, когда продукт ограничен. Административная часть плагина использует первый фрагмент кода в моем вопросе (НЕ ИЗМЕНЕНО), что отличается - это вторая часть, логика, которая извлекает местоположение пользователя и удаляет кнопку добавления в корзину, если условия не выполняются с использованием фильтров и действий Woocommerce.   -  person TafMakura    schedule 31.08.2015
comment
@inspiredlife Я только что отредактировал второй фрагмент кода, чтобы он работал так, как работает в моем плагине, вы можете сделать все остальное. ВАЖНО, что $ base_country в приведенном выше коде должен быть двухбуквенным кодом страны ISO пользователя, который вы нужно получить его самостоятельно, используя IP-адрес пользователя, Woocommerce теперь имеет встроенную функцию для этого.   -  person TafMakura    schedule 31.08.2015
comment
@inspiredlife свяжитесь со мной, если вам нужен собственный разработчик   -  person TafMakura    schedule 31.08.2015
comment
@TafMak: Спасибо, что ответили мне на этот вопрос. Я поиграю с кодом, который вы предоставили. Ура ... Джонатан   -  person inspirednz    schedule 01.09.2015
comment
Пожалуйста, поделитесь улучшениями или настройками   -  person TafMakura    schedule 01.09.2015
comment
@TafMak: Вау. Похоже, меня за это поджидали! Я вижу, прошел год. Я снова искал решение этого требования, нашел ваш пост, а потом увидел здесь свои комментарии! Думаю, для этого проекта (год назад) было реализовано какое-то другое решение. Теперь у меня есть другой проект, требующий той же функциональности, что и у продуктов с географическим ограничением. Ваш код (см. Выше) по-прежнему остается жизнеспособным или изменился за последний год? Спасибо.   -  person inspirednz    schedule 06.09.2016
comment
Все еще работало в последний раз, когда я проверял, единственная разница в том, что Woocommerce теперь имеет встроенное кодирование GEO, что значительно упрощает его реализацию.   -  person TafMakura    schedule 07.09.2016


Ответы (1)


Не уверен, что вы это видели / пробовали, но согласно http://docs.woothemes.com/document/configuring-woocommerce-settings/ вы можете делать то, о чем просите.

Чтобы настроить свой магазин, перейдите в WooCommerce ›Настройки. Затем просмотрите содержимое ниже, чтобы получить дополнительную информацию о параметрах WooCommerce.

Разрешенные страны

Здесь вы можете выбрать, хотите ли вы продавать / отправлять товары в другие страны или в несколько избранных - это полезно, например, если вы торгуете только в своей стране. Клиенты за пределами разрешенных вами стран не смогут оформить заказ.

Конкретные страны

Определите страны, в которые вы хотите продавать / отправлять. Вы должны установить опцию «Разрешенные страны» на «Определенные страны».

person Howli    schedule 26.01.2014
comment
Я знаю об этом, но 1) это настройка для всего сайта, она повлияет на все продукты. 2) WooCommerce не имеет геокодирования, поэтому он полагается на информацию, которую пользователь предоставляет для определения местоположения. Этот параметр зависит от платежного адреса пользователя. Приведенный выше плагин должен достичь: 1) Использовать геокодирование для определения местоположения пользователя. 2) Разрешите администратору сайта устанавливать разрешенные страны для каждого продукта, а не для всего сайта. - person TafMakura; 27.01.2014
comment
3) Отключите кнопку добавления в корзину или любую другую функцию шаблона, когда продукт, который пользователь хочет купить, ограничен для его страны (пользователь НЕ МОЖЕТ купить продукт), это идеально подходит для лицензионных элементов на основе местоположения, таких как загрузка фильмов. 4) ОНА РАБОТАЕТ С ЦИФРОВЫМИ загрузками и не зависит от адреса доставки. - person TafMakura; 27.01.2014