首页 文章

从基于城市的运费中获取城市列表

提问于
浏览
0

所以,我在我的网站的结算/运输部分的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' );

一切都按预期工作,但这是我想要做的不同 .

我希望能够从 shipping rates based on city 查询所有城市列表,并在上面的下拉代码中显示它们 .

enter image description here

那么我就不必在多个地方手动添加城市 . 我的城市列表将始终是使用 shipping rates based on city 功能添加的城市 .

我需要做什么才能删除手动输入的城市并具有类似于以下内容的内容:

‘options’ => get_list_cities_from_shipping_rate(),

问题:

什么filters or hooks在woocommerce我必须打电话才能返回我的功能 get_list_cities_from_shipping_rate() 中的城市列表?

我是新手在wordpress中编写这些自定义代码 . 任何关于如何开始这一点的帮助指针将不胜感激 .

先感谢您

1 回答

  • 0

    试试这个:

    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_idpost= 之后的 http://example.com/wp-admin/post.php?post=123&action=edit . 将鼠标悬停在免运费表行中,您会看到编辑网址具有 post 查询 .

    • 你必须使用城市的名字而不是它的slu ..例如 . Den Haag 而不是 den-haag . 请参阅您提供的image .

相关问题