邮政编码验证不适用于邮政编码范围
P粉449281068
P粉449281068 2023-09-08 09:16:07
0
1
521

尝试在 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粉449281068
P粉449281068

全部回复(1)
P粉872182023

我不知道这是否有帮助,但已经有一个名为 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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!