我想得到所有的数据(zone_name,zone_id)当有免费送货区。我用过:
$delivery_zones = WC_Shipping_Zones::get_zones(); foreach ((array) $delivery_zones as $key => $the_zone ) { echo $the_zone['zone_name']; } print_r($delivery_zones);
但是它总是返回没有世界其他地区的结果。我如何才能获得所有免费送货区的所有数据?
mklgxw1f1#
我在official thread related to WC 2,6+ and Shipping default Zone和**WC_Shipping_Zone类的源代码中进行了一些搜索后得到了您的答案。您了解到默认类有一个ID = 0**。我先试过这个:
WC_Shipping_Zone
ID = 0
$default_zone = new WC_Shipping_Zone(0); print_r($default_zone);
我得到了这个数组:WC运输区域对象([数据:受保护]=〉数组([区域ID]=〉0
如果您查看**WC_Shipping_Zone,您会看到它扩展了**WC_Data类。因此我尝试对该对象使用WC_Data方法,如下所示:
$default_zone = new WC_Shipping_Zone(0); $default_zone_data = $default_zone->get_data(); print_r($default_zone_data);
宾果2!!!它输出了sam数组,但是这次没有保护和访问。所以答案是:
$default_zone = new WC_Shipping_Zone(0); $default_zone_data = $default_zone->get_data(); $default_zone_id = $default_zone_data->zone_id; $default_zone_order = $default_zone_data-> zone_order; $default_zone_locations = $default_zone_data-> zone_locations; $default_zone_meta_data = $default_zone_data-> meta_data; // AND TO FINISH THE THE NAME!!! $default_zone_name = $default_zone_data->zone_name; echo $default_zone_name;
echo $default_zone_name
您还可以使用其他WC_Data和WC_Shipping_Zone方法来获取所需的数据:
WC_Data
$default_zone = new WC_Shipping_Zone(0); $default_zone_formatted_location = $default_zone->get_formatted_location(); $default_zone_shipping_methods = $default_zone->get_shipping_methods(); // And so on …
ilmyapht2#
谢谢LoicTheAztec的回答。在阅读了他的回答后,我已经找到了答案。以下是全部:
$zones = array(); // Rest of the World zone $zone = new \WC_Shipping_Zone( 0 ); $zones[$zone->get_zone_id()] = $zone->get_data(); $zones[$zone->get_zone_id()]['formatted_zone_location'] = $zone->get_formatted_location(); $zones[$zone->get_zone_id()]['shipping_methods'] = $zone->get_shipping_methods(); // Add user configured zones $zones = array_merge( $zones, WC_Shipping_Zones::get_zones() ); foreach ( $zones as $each_zone ) { $zone_name = $each_zone['zone_name']; $shipping_methods = $each_zone['shipping_methods']; $arr_shipping_methods = json_decode( json_encode( $shipping_methods ), true ); foreach ( $arr_shipping_methods as $free_shipping ) { if ( $free_shipping['id'] == 'free_shipping' ) { $zone_id = $each_zone['zone_id']; } else { echo ''; } } }
2条答案
按热度按时间mklgxw1f1#
我在official thread related to WC 2,6+ and Shipping default Zone和**
WC_Shipping_Zone
类的源代码中进行了一些搜索后得到了您的答案。您了解到默认类有一个ID = 0
**。我先试过这个:
我得到了这个数组:
WC运输区域对象([数据:受保护]=〉数组([区域ID]=〉0
如果您查看**
WC_Shipping_Zone
,您会看到它扩展了**WC_Data类。因此我尝试对该对象使用WC_Data方法,如下所示:
宾果2!!!它输出了sam数组,但是这次没有保护和访问。
所以答案是:
echo $default_zone_name
的输出是世界其他地区**(再次宾果!!!)...您还可以使用其他
WC_Data
和WC_Shipping_Zone
方法来获取所需的数据:ilmyapht2#
谢谢LoicTheAztec的回答。在阅读了他的回答后,我已经找到了答案。以下是全部: