如何检测WooCommerce用户是否已保存地址 相关实现方案咨询
需求实现说明
该检测需求完全可实现,不需要依赖用户的购买记录,WooCommerce的用户地址数据存储在用户元数据中,通过官方提供的WC_Customer类即可直接读取判断,不需要额外的Hook。
实现代码
你可以直接使用下面的自定义函数完成检测:
/** * 检测用户是否已保存WooCommerce地址 * @param int $user_id 用户ID,不传默认取当前登录用户ID * @param string $address_type 地址类型:billing(账单)/shipping(收货)/any(任意一种),默认any * @return bool */ function wc_customer_has_saved_address( $user_id = 0, $address_type = 'any' ) { // 未传入用户ID时取当前登录用户 if ( ! $user_id ) { $user_id = get_current_user_id(); } // 非登录用户直接返回false if ( ! $user_id ) { return false; } $customer = new WC_Customer( $user_id ); $has_billing = false; $has_shipping = false; // 检测账单地址核心字段是否填写 if ( $customer->get_billing_address_1() && $customer->get_billing_city() && $customer->get_billing_postcode() && $customer->get_billing_country() ) { $has_billing = true; } // 检测收货地址核心字段是否填写 if ( $customer->get_shipping_address_1() && $customer->get_shipping_city() && $customer->get_shipping_postcode() && $customer->get_shipping_country() ) { $has_shipping = true; } // 根据指定的地址类型返回结果 switch ( $address_type ) { case 'billing': return $has_billing; case 'shipping': return $has_shipping; case 'any': default: return $has_billing || $has_shipping; } }
使用示例
- 检测当前登录用户是否保存过任意地址:
if ( wc_customer_has_saved_address() ) { // 你的业务逻辑 } - 检测ID为123的用户是否保存了专属收货地址:
if ( wc_customer_has_saved_address( 123, 'shipping' ) ) { // 你的业务逻辑 }
注意事项
你可以根据站点的地址必填规则调整判断条件,比如站点要求地址必须填写手机号,就可以在账单地址判断逻辑中补充$customer->get_billing_phone()的非空校验即可。该方案兼容WooCommerce 3.0及以上所有版本,不需要直接操作数据库,稳定性更高。
内容的提问来源于stack exchange,提问作者Sallar Rabiei
相关产品推荐
相关产品推荐

