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

Есть ли способ / плагин в Wordpress WooCommerce, чтобы ограничить загрузку определенного продукта в определенном регионе. Помните, что это не должно быть для всего сайта, но на основе продукта к продукту.

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

ОБНОВЛЕНИЕ: видя, что не было никакого ответа, я пошел вперед и начал создавать что-то самостоятельно. У меня нет опыта работы с 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,');
        }

?>

1 ответ

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

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

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

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

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

Определите страны, в которые вы готовы продать / отправить. Вы должны установить для параметра "Разрешенные страны" значение "Определенные страны".

Другие вопросы по тегам