Получите базовую страну магазина в стороннем плагине WooCommerce - PullRequest
0 голосов
/ 18 июня 2020

Я создаю плагин для Woocommerce, и мне нужно заблокировать его установку, когда страна магазина находится не в США (например)

function init(){
    if (in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' )))) {

        $shop_country = WC()->countries->get_base_country(); // FAIL: Call to a member function get_base_country() on null 

        if ($shop_country !== 'US') {
            add_action( 'admin_notices', 'show_error' ); return;
        }

        /**
         * The core plugin class that is used to define internationalization,
         * admin-specific hooks, and public-facing site hooks.
         */

        init_my_plugin();
    }
    else{
        add_action( 'admin_notices', 'show_error' );
    }
}
add_action('plugins_loaded','init');

function show_error(){
    ?>
    <div class="error">
        <p><?php _e( 'This plugin requires WooCommerce in order to work.', 'plugin' ); ?></p>
    </div>
    <?php
}

В своей функции инициализации я пытаюсь получить магазин страна (здесь ОШИБКА), и если это не США, я показываю ошибку и не позволяю им установить плагин. Однако у меня возникла ошибка: вызов функции-члена get_base_country () с нулевым значением.

Я считаю, что моя функция вызывается, когда объект Woocommerce не готов. Не могли бы вы показать мне правильный крючок для этого? Я хочу узнать местонахождение магазина, чтобы проверить, поддерживает ли мой плагин эту страну

Примечание: что я имею в виду в магазине / стране магазина? Я имею в виду поле страны в настройке Woocommerce.

1 Ответ

0 голосов
/ 19 июня 2020

Чтобы получить базовую страну магазина, вам не нужно использовать класс WC_Countries, поэтому замените:

$shop_country = WC()->countries->get_base_country(); 

на:

$shop_country = wc_get_base_location()['country'];

Или на это тоже:

$shop_location = get_option( 'woocommerce_default_country' ); 
$shop_location = explode(':', $shop_location);
$shop_country  = reset($shop_location); 

Так как базовое местоположение магазина хранится в таблице wp_options.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...