获取 Woocommerce 3 中的所有运输类别
Posted
技术标签:
【中文标题】获取 Woocommerce 3 中的所有运输类别【英文标题】:Get All Shipping Classes in Woocommerce 3 【发布时间】:2018-09-25 10:30:24 【问题描述】:我一直无法破解这个难题,但不禁觉得我错过了一些简单的东西。
我正在开发一个 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() returns Invalid Taxonomy 并提供了解决方法。但是,我不认为这是一个解决方案。
【问题讨论】:
您是要获取所有的运输类别还是运输方式?另外,你试过去掉WC_Shipping();
前面的斜线吗?
【参考方案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->prefixterms as t
INNER JOIN $wpdb->prefixterm_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 非常奇怪,因为所有运输类别都是 Woocommerce 中“product_shipping_class”自定义分类的术语。所以我已经更新了我的答案,添加了第二种方法……试试吧。 感谢您的努力。 :) 我很高兴遍历get_terms()
的结果(没有任何参数)并过滤掉我的结果。我相当有信心某处存在正在肆虐的错误或冲突。 :|【参考方案2】:
也许有人还在寻找解决方案:)
$WC_Shipping = new WC_Shipping();
$shipping_classes = $WC_Shipping->get_shipping_classes();
var_dump($shipping_classes);
【讨论】:
以上是关于获取 Woocommerce 3 中的所有运输类别的主要内容,如果未能解决你的问题,请参考以下文章
在 WooCommerce 购物车页面中的每个产品下方添加运输类别