Woocommerce如何为每个自定义结账字段设置不同的placeholder
问题解决:WooCommerce自定义结账字段设置独立placeholder
错误原因
你之前修改后网站崩溃的核心问题是字符串值未加引号包裹:PHP会将未用引号包裹的15 VAT number、050011223344识别为非法语法/未知常量,直接触发致命错误导致站点崩溃。
实现方案
提供两种可选实现方式:
方案1:快速修改原有逻辑
直接调整custom_billing_fields函数中placeholder的赋值规则即可,代码如下:
// Add custom billing fields to Checkout and My account edit addresses add_filter( 'woocommerce_billing_fields' , 'custom_billing_fields' ); function custom_billing_fields( $fields ) { $settings = custom_checkout_fields_settings_vat(); // Load settings // Loop through setting fields foreach ( $settings as $field_key => $field_label ) { $fields['billing_'.$field_key] = array( 'type' => 'text', 'label' => $field_label, // 字符串必须用引号包裹,三元判断语法要合法 'placeholder' => $field_key === 'vat' ? '15 VAT number' : '050011223344', 'class' => array('form-field-wide'), // 两个字段class一致可直接合并,无需判断 'required' => $field_key === 'vat' ? false : true, 'clear' => true, 'priority' => $field_key === 'vat' ? 31 : 32, ); } return $fields; }
方案2:更易维护的配置化实现
如果后续需要新增更多字段,推荐直接修改配置函数,把placeholder也纳入配置项,后续新增字段无需修改循环逻辑:
// 调整配置函数,每个字段存储label和placeholder两个参数,同时支持多语言翻译 function custom_checkout_fields_settings_vat() { $text_domain = 'toBeTranslatd'; return array( 'vat' => [ 'label' => __('VAT', $text_domain), 'placeholder' => __('15 VAT number', $text_domain) ], 'phone' => [ 'label' => __('Phone Number', $text_domain), 'placeholder' => __('050011223344', $text_domain) ] ); } // 调整循环读取逻辑 add_filter( 'woocommerce_billing_fields' , 'custom_billing_fields' ); function custom_billing_fields( $fields ) { $settings = custom_checkout_fields_settings_vat(); foreach ( $settings as $field_key => $field_config ) { $fields['billing_'.$field_key] = array( 'type' => 'text', 'label' => $field_config['label'], 'placeholder' => $field_config['placeholder'], // 直接从配置读取对应placeholder 'class' => array('form-field-wide'), 'required' => $field_key === 'vat' ? false : true, 'clear' => true, 'priority' => $field_key === 'vat' ? 31 : 32, ); } return $fields; }
内容的提问来源于stack exchange,提问作者Bassam Radi
相关产品推荐
相关产品推荐

