从基于城市的运费中获取城市列表
Get list of CITIES from Shipping rates based on city
因此,我在我网站的 Billing/Shipping 部分中的 How to change the city field to a dropdown by Jeroen 上遵循了这个示例。
/**
* Change the checkout city field to a dropdown field.
*/
function city_to_dropdown( $fields ) {
$city_args = wp_parse_args( array(
'type' => 'select',
'options' => array(
'amsterdam' => 'Amsterdam',
'rotterdam' => 'Rotterdam',
'den-haag' => 'Den Haag',
'utrecht' => 'Utrecht',
'leiden' => 'Leiden',
'groningen' => 'Groningen',
),
), $fields['shipping']['shipping_city'] );
$fields['shipping']['shipping_city'] = $city_args;
$fields['billing']['billing_city'] = $city_args; // Also change for billing field
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'city_to_dropdown' );
一切都按预期工作,但这是我想要做的不同之处。
我希望能够从基于城市的运费中查询所有城市列表,并在上面的下拉代码中显示它们。
这样我就不用在多个地方手动添加城市了。我的城市列表将始终是使用基于城市的运费功能添加的城市。
我需要做什么才能删除手动输入的城市并获得类似于以下内容的内容:
‘options’ => get_list_cities_from_shipping_rate(),
问题:
我必须在 woocommerce 中调用什么 filters or hooks 才能 return 我的函数 get_list_cities_from_shipping_rate()
中的城市列表?
我不熟悉在 wordpress 中编写这些自定义代码。任何关于如何开始这个的帮助指示将不胜感激。
提前致谢
试试这个:
function get_list_cities_from_shipping_rate( $rate_id ) {
$cities = '';
$key = '_wafs_shipping_method_conditions';
$conditions = get_post_meta( $rate_id, $key, true );
foreach ( (array) $conditions as $group ) {
foreach ( (array) $group as $cond ) {
if ( ! isset( $cond['condition'] ) ) {
continue;
}
if (
'city' === $cond['condition'] &&
'==' === $cond['operator']
) {
$cities .= $cities ? ', ' : '';
$cities .= $cond['value'];
}
}
}
$cities = preg_split( '/, */', $cities );
return array_unique( array_filter( $cities ) );
}
注意事项:
在 WooCommerce → 设置 → 高级免费送货 页面上,$rate_id
是 post=
之后的那个 post=
=13=]。将鼠标悬停在 Free shipping rates table 行上,您会看到 Edit URL 具有 post
查询。
您必须使用城市的名称,而不是它的别名。例如。 Den Haag
而不是 den-haag
。查看您提供的image。
因此,我在我网站的 Billing/Shipping 部分中的 How to change the city field to a dropdown by Jeroen 上遵循了这个示例。
/**
* Change the checkout city field to a dropdown field.
*/
function city_to_dropdown( $fields ) {
$city_args = wp_parse_args( array(
'type' => 'select',
'options' => array(
'amsterdam' => 'Amsterdam',
'rotterdam' => 'Rotterdam',
'den-haag' => 'Den Haag',
'utrecht' => 'Utrecht',
'leiden' => 'Leiden',
'groningen' => 'Groningen',
),
), $fields['shipping']['shipping_city'] );
$fields['shipping']['shipping_city'] = $city_args;
$fields['billing']['billing_city'] = $city_args; // Also change for billing field
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'city_to_dropdown' );
一切都按预期工作,但这是我想要做的不同之处。
我希望能够从基于城市的运费中查询所有城市列表,并在上面的下拉代码中显示它们。
这样我就不用在多个地方手动添加城市了。我的城市列表将始终是使用基于城市的运费功能添加的城市。
我需要做什么才能删除手动输入的城市并获得类似于以下内容的内容:
‘options’ => get_list_cities_from_shipping_rate(),
问题:
我必须在 woocommerce 中调用什么 filters or hooks 才能 return 我的函数 get_list_cities_from_shipping_rate()
中的城市列表?
我不熟悉在 wordpress 中编写这些自定义代码。任何关于如何开始这个的帮助指示将不胜感激。
提前致谢
试试这个:
function get_list_cities_from_shipping_rate( $rate_id ) {
$cities = '';
$key = '_wafs_shipping_method_conditions';
$conditions = get_post_meta( $rate_id, $key, true );
foreach ( (array) $conditions as $group ) {
foreach ( (array) $group as $cond ) {
if ( ! isset( $cond['condition'] ) ) {
continue;
}
if (
'city' === $cond['condition'] &&
'==' === $cond['operator']
) {
$cities .= $cities ? ', ' : '';
$cities .= $cond['value'];
}
}
}
$cities = preg_split( '/, */', $cities );
return array_unique( array_filter( $cities ) );
}
注意事项:
在 WooCommerce → 设置 → 高级免费送货 页面上,
$rate_id
是post=
之后的那个post=
=13=]。将鼠标悬停在 Free shipping rates table 行上,您会看到 Edit URL 具有post
查询。您必须使用城市的名称,而不是它的别名。例如。
Den Haag
而不是den-haag
。查看您提供的image。