如何在保存前为WooCommerce结账address_1字段值添加前缀?
修改WooCommerce address_1字段存储值的实现方案
你可以使用woocommerce_checkout_posted_data过滤器钩子,它允许在结账提交的数据保存到数据库之前,修改提交的字段值。
具体实现代码如下:
function prepend_landmark_to_address1( $posted_data ) { // 检查账单地址address_1是否有值,避免空值添加前缀 if ( ! empty( $posted_data['billing_address_1'] ) ) { $posted_data['billing_address_1'] = 'Landmark: ' . $posted_data['billing_address_1']; } // 如果是配送地址,同步处理address_1字段 if ( ! empty( $posted_data['shipping_address_1'] ) ) { $posted_data['shipping_address_1'] = 'Landmark: ' . $posted_data['shipping_address_1']; } return $posted_data; } add_filter( 'woocommerce_checkout_posted_data', 'prepend_landmark_to_address1' );
补充说明:
- 该钩子会拦截结账时提交的所有数据,我们针对性处理账单和配送地址的address_1字段,确保存入数据库的值带指定前缀。
- 加入空值判断是为了避免用户未填写字段时,数据库存入无意义的前缀文本。
如果需要覆盖用户在账户页面更新地址的场景,可以额外添加woocommerce_customer_save_address动作钩子:
function prepend_landmark_on_address_save( $user_id, $load_address, $address ) { if ( isset( $address['address_1'] ) && ! empty( $address['address_1'] ) ) { update_user_meta( $user_id, $load_address . '_address_1', 'Landmark: ' . $address['address_1'] ); } } add_action( 'woocommerce_customer_save_address', 'prepend_landmark_on_address_save', 10, 3 );
内容的提问来源于stack exchange,提问作者Vinith Almeida
相关产品推荐
相关产品推荐

