Я не смог расколоть этот орешек, но не могу избавиться от ощущения, что мне не хватает чего-то простого.
Я разрабатываю плагин 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 () возвращает неверную таксономию и предоставили обходной путь. Однако я не думаю, что это решение.






Чтобы получить все классы доставки, вам понадобится следующее:
$shipping_classes = get_terms( array('taxonomy' => 'product_shipping_class', 'hide_empty' => false ) );
Проверено и работает. Это даст вам массив объектов WP_Term всех классов доставки.
In Woocommerce the shipping classes are under
product_shipping_classcustom taxonomy.
Или вы можете использовать эту настраиваемую функцию с простым запросом 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
В моем случае это не работает. Я пробовал это, и по какой-то причине он возвращает только один класс доставки, а не все из них. Я добавил ссылку в исходном вопросе на другой вопрос, который, как я обнаружил, более точно отражает точную проблему. Я также предложил обходной путь, но не думаю, что это подходящее решение.
@ mike.bronner Очень, странно, потому что все классы доставки - это термины из настраиваемой таксономии "product_shipping_class" в Woocommerce. Итак, Я обновил свой ответ, добавив второй способ… Попробуй.
Спасибо, что приложили усилия. :) Я счастлив перебирать результаты get_terms() (без каких-либо аргументов) и отфильтровывать мои результаты. Я почти уверен, что где-то есть ошибка или конфликт, который сеет хаос. : |
Вы пытаетесь узнать все классы доставки или способы доставки? Кроме того, пробовали ли вы убрать косую черту перед
WC_Shipping();?