【问题标题】:Get All Shipping Classes in Woocommerce 3获取 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();前面的斜线吗?

标签: php wordpress woocommerce shipping custom-taxonomy


【解决方案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   

【讨论】:

  • 这在我的情况下实际上不起作用。我已经尝试过了,由于某种原因它只返回一个运输类别,而不是全部。我在原始问题中添加了一个链接到另一个我发现更准确地提出了确切问题的问题。我还在那里提供了一个解决方法,但我认为这不是一个合适的解决方案。
  • @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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2017-12-21
    • 2018-11-28
    • 2017-04-01
    • 2018-09-25
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多