Получите все классы доставки в Woocommerce 3

Я не смог расколоть этот орех, но не могу избавиться от ощущения, что упускаю что-то простое.

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

$shipping           = new \WC_Shipping();
$shipping_classes   = $shipping->get_shipping_classes();
var_dump($shipping_classes);
die();

К сожалению, на выходе получается пустой массив.

Я использую Wordpress 4.9.5 и WooCommerce 3.3.5. Спасибо за любую помощь!

ОБНОВЛЕНИЕ. У меня точно такая же проблема, как описано здесь: get_terms () возвращает недопустимую таксономию и предлагает обходной путь. Однако я не думаю, что это решение.


person mike.bronner    schedule 15.04.2018    source источник
comment
Вы пытаетесь узнать все классы доставки или способы доставки? Кроме того, пробовали ли вы убрать косую черту перед WC_Shipping();?   -  person Frits    schedule 15.04.2018


Ответы (1)


Чтобы получить все классы доставки, вам понадобится следующее:

$shipping_classes = get_terms( array('taxonomy' => 'product_shipping_class', 'hide_empty' => false ) );

Проверено и работает. Это даст вам массив WP_Term объектов всех классов доставки.

В Woocommerce классы доставки относятся к product_shipping_class настраиваемой таксономии.


Или вы можете использовать эту настраиваемую функцию с простым запросом SQL:

function wc_get_shipping_classes(){
    global $wpdb;
    $return $wpdb->get_results( "
        SELECT * FROM {$wpdb->prefix}terms as t
        INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON t.term_id = tt.term_id
        WHERE tt.taxonomy LIKE 'product_shipping_class'
    " );
}

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

ИСПОЛЬЗОВАНИЕ (тестовый пример):

$shipping_classes = wc_get_shipping_classes(); // Get Shipping Classes
echo '<pre>'; print_r($shipping_classes); echo '</pre>'; // Test raw output   
person LoicTheAztec    schedule 15.04.2018
comment
В моем случае это не работает. Я пробовал это, и по какой-то причине он возвращает только один класс доставки, а не все из них. Я добавил ссылку в исходном вопросе на другой вопрос, который, как я обнаружил, более точно отражает точную проблему. Я также предоставил обходной путь, но я не думаю, что это было правильным решением. - person mike.bronner; 16.04.2018
comment
@ mike.bronner Очень, странно, потому что все классы доставки - это термины из настраиваемой таксономии product_shipping_class в Woocommerce. Итак, Я обновил свой ответ, добавив второй способ… Попробуйте. - person LoicTheAztec; 16.04.2018
comment
Спасибо, что приложили усилия. :) Я счастлив перебирать результаты get_terms() (без аргументов) и фильтровать мои результаты. Я почти уверен, что где-то есть ошибка или конфликт, который сеет хаос. : | - person mike.bronner; 17.04.2018