尝试在 woocommerce 中创建邮政编码验证。
我无法让我的查询查看像 10000-000...15000-000 这样的范围间隔。
我的查询适用于简单的邮政编码(10000-000 或 11001-001),但不适用于邮政编码范围。
global $wpdb; $tabela_cep = $wpdb->prefix . 'woocommerce_shipping_zone_locations'; $query = "SELECT location_code FROM $tabela_cep WHERE location_code = %s LIMIT 1"; $resultado = $wpdb->get_var($wpdb->prepare($query, $cep));
我不知道 woocommerce 如何在数据库中存储所有运输区域的所有范围。
我尝试过“ Between”sintax来过滤字段locationcode和locationcode2,但我不确定这是否是正确的字段名称/表名称,甚至是否有其他方法可以实现这个。
global $wpdb; $tabela_cep = $wpdb->prefix . 'woocommerce_shipping_zone_locations'; $query = "SELECT location_code FROM $tabela_cep WHERE %s BETWEEN CAST(location_code AS UNSIGNED) AND CAST(location_code2 AS UNSIGNED) LIMIT 1"; $resultado = $wpdb->get_var($wpdb->prepare($query, $cep));
谢谢
P粉8721820232023-09-09 00:12:19
我不知道这是否有帮助,但已经有一个名为 wc_postcode_location_matcher() 的核心 WooCommerce 函数,可以检查给定的邮政编码是否在邮政编码范围内。
您首先需要计算 $postcode_locations:
global $wpdb; $postcode_locations = $wpdb->get_results( "SELECT zone_id, location_code FROM {$wpdb->prefix}woocommerce_shipping_zone_locations WHERE location_type = 'postcode';" );
然后您需要 $country,因此如果您在结帐页面上:
$country = WC()->customer->get_billing_country();
...或者如果您正在验证订单:
$country = $order->get_billing_country();
那么你就可以开始了:
$matches = wc_postcode_location_matcher( $postcode, $postcode_locations, 'zone_id', 'location_code', $country ); return $matches; // if empty there is no match