Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取所有免费配送区域包括默认区域;“世界其他地区”;_Php_Wordpress_Woocommerce_Shipping_Zone - Fatal编程技术网

Php 获取所有免费配送区域包括默认区域;“世界其他地区”;

Php 获取所有免费配送区域包括默认区域;“世界其他地区”;,php,wordpress,woocommerce,shipping,zone,Php,Wordpress,Woocommerce,Shipping,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); 但是,它总是返回结果,而不会返回世界其他地区的结果。如何使用所有免费配送区获取所有数据?我

我想得到所有的数据(区域名称,区域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);

但是,它总是返回结果,而不会返回世界其他地区的结果。如何使用所有免费配送区获取所有数据?

我在该区域和类的源代码中搜索了一些后,得到了您的答案。您了解到默认类的ID=0

我先试过这个:

$default_zone = new WC_Shipping_Zone(0);
print_r($default_zone);
我得到了这个数组:

WC\u Shipping\u Zone对象([\u数据:受保护]=>数组([Zone\u id]=>0
[Zone\u name]=>世界其他地区[/strong>[Zone\u order]=>0[Zone\u locations]=>Array())[\u位置更改:WC\u Shipping\u Zone:private]=>[\u缓存\u组:受保护]=>[\u元类型:受保护]=>post[元数据的对象id\u字段:受保护]=>=>数组()[[内部\元\键:受保护]=>数组())

宾果1!数据在那里
,我得到了默认配送区对象,但它受到保护,并且无法通过foreach循环或其他方式访问

如果你看,你会发现它扩展了类
因此,我尝试对该对象使用WC_数据方法,方法如下:

$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\u zone\u name
的输出是世界其他地区的(再次宾果!!!)

您还可以使用和其他方法来获取所需的数据:

$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 …

我得到了你的答案后,在一些搜索,也在源代码的类。您了解到默认类的ID=0

我先试过这个:

$default_zone = new WC_Shipping_Zone(0);
print_r($default_zone);
我得到了这个数组:

WC\u Shipping\u Zone对象([\u数据:受保护]=>数组([Zone\u id]=>0
[Zone\u name]=>世界其他地区[/strong>[Zone\u order]=>0[Zone\u locations]=>Array())[\u位置更改:WC\u Shipping\u Zone:private]=>[\u缓存\u组:受保护]=>[\u元类型:受保护]=>post[元数据的对象id\u字段:受保护]=>=>数组()[[内部\元\键:受保护]=>数组())

宾果1!数据在那里
,我得到了默认配送区对象,但它受到保护,并且无法通过foreach循环或其他方式访问

如果你看,你会发现它扩展了类
因此,我尝试对该对象使用WC_数据方法,方法如下:

$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\u zone\u name
的输出是世界其他地区的(再次宾果!!!)

您还可以使用和其他方法来获取所需的数据:

$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 …

感谢@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 '';
            }
        }

    }

感谢@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 '';
            }
        }

    }

谢谢你的回答,但是你能帮我得到免费送货方式的区域名称和区域id吗?请告知你的答案。我找到了获得所有价值的方法。我将在这里发布答案并添加您的skype。非常感谢你!谢谢你的回答,但是你能帮我得到免费送货方式的区域名称和区域id吗?请告知你的答案。我找到了获得所有价值的方法。我将在这里发布答案并添加您的skype。非常感谢你!我知道你的帮助,非常感谢。我对你的答案投了赞成票。我知道你的帮助,非常感谢。我投票赞成你的答案。