7

我正在尝试在我的 WooCommerce 结帐字段中添加一个占位符,它对除电话和电子邮件字段之外的每个字段都非常有效。

这是我正在使用的代码:

add_filter('woocommerce_default_address_fields', 'override_address_fields');
function override_address_fields( $address_fields ) {
    $address_fields['first_name']['placeholder'] = 'Fornavn';
    $address_fields['last_name']['placeholder'] = 'Efternavn';
    $address_fields['address_1']['placeholder'] = 'Adresse';
    $address_fields['state']['placeholder'] = 'Stat';
    $address_fields['postcode']['placeholder'] = 'Postnummer';
    $address_fields['city']['placeholder'] = 'By';
    $address_fields['phone']['placeholder'] = 'Telefon';
    $address_fields['email']['placeholder'] = 'Email';
    return $address_fields;
}

我哪里错了?为什么电话和电子邮件没有任何结果?

我已经使用我的浏览器开发工具检查器从这两个字段中获取了 ID。


编辑:

我也试过这个建议的代码:

add_filter('woocommerce_checkout_fields', 'override_checkout_fields');
function override_checkout_fields( $checkout_fields ) {
    $checkout_fields['first_name']['placeholder'] = 'Fornavn';
    $checkout_fields['last_name']['placeholder'] = 'Efternavn';
    $checkout_fields['address_1']['placeholder'] = 'Adresse';
    $checkout_fields['state']['placeholder'] = 'Stat';
    $checkout_fields['postcode']['placeholder'] = 'Postnummer';
    $checkout_fields['city']['placeholder'] = 'By';
    $checkout_fields['phone']['placeholder'] = 'Telefon';
    $checkout_fields['email']['placeholder'] = 'Email';
    return $checkout_fields;
}

还有这个:

add_filter('woocommerce_checkout_fields', 'override_checkout_fields');
function override_checkout_fields( $checkout_fields ) {
    $checkout_fields['billing_first_name']['placeholder'] = 'Fornavn';
    $checkout_fields['billing_last_name']['placeholder'] = 'Efternavn';
    $checkout_fields['billing_address_1']['placeholder'] = 'Adresse';
    $checkout_fields['billing_state']['placeholder'] = 'Stat';
    $checkout_fields['billing_postcode']['placeholder'] = 'Postnummer';
    $checkout_fields['billing_city']['placeholder'] = 'By';
    $checkout_fields['billing_phone']['placeholder'] = 'Telefon';
    $checkout_fields['billing_email']['placeholder'] = 'Email';
    return $checkout_fields;
}

但它不起作用。

4

3 回答 3

20

查看官方文档,您会看到使用过滤器挂钩时,默认地址没有 'phone'和关键字段。 接受的字段键是:, , , , , , , , .'email'woocommerce_default_address_fields

countryfirst_namelast_namecompanyaddress_1address_2citystatepostcode

这就是为什么您可以使用woocommerce_default_address_fields

电子邮件和电话是计费字段,它们可通过woocommerce_checkout_fields过滤器挂钩使用。它们被命名(参见文档)'billing_phone'并且'billing_phone'......</p>

覆盖它们的正确方法是:

add_filter( 'woocommerce_checkout_fields' , 'override_billing_checkout_fields', 20, 1 );
function override_billing_checkout_fields( $fields ) {
    $fields['billing']['billing_phone']['placeholder'] = 'Telefon';
    $fields['billing']['billing_email']['placeholder'] = 'Email';
    return $fields;
}

对于其他字段(计费和运输):

add_filter('woocommerce_default_address_fields', 'override_default_address_checkout_fields', 20, 1);
function override_default_address_checkout_fields( $address_fields ) {
    $address_fields['first_name']['placeholder'] = 'Fornavn';
    $address_fields['last_name']['placeholder'] = 'Efternavn';
    $address_fields['address_1']['placeholder'] = 'Adresse';
    $address_fields['state']['placeholder'] = 'Stat';
    $address_fields['postcode']['placeholder'] = 'Postnummer';
    $address_fields['city']['placeholder'] = 'By';
    return $address_fields;
}

代码在您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。

所有代码都在 Woocommerce 3+ 上进行了测试并且可以正常工作。


参考:使用操作和过滤器自定义结帐字段


对于登录表单字段:自定义 WooCommerce 登录表单用户字段

于 2017-09-21T00:34:24.127 回答
3

根据官方文档https://docs.woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ 这里有更新的代码:

 add_filter( 'woocommerce_checkout_fields' , 'override_billing_checkout_fields', 20, 1 );
 function override_billing_checkout_fields( $fields ) {

     $fields['billing']['billing_first_name']['placeholder'] = 'Prénom';
     $fields['billing']['billing_last_name']['placeholder'] = 'Nom';
     $fields['billing']['billing_company']['placeholder'] = 'Nom de la société (optionnel)';
     $fields['billing']['billing_postcode']['placeholder'] = 'Code postal';
     $fields['billing']['billing_phone']['placeholder'] = 'Téléphone';
     $fields['billing']['billing_city']['placeholder'] = 'Ville';


     $fields['shipping']['shipping_first_name']['placeholder'] = 'Prénom';
     $fields['shipping']['shipping_last_name']['placeholder'] = 'Nom';
     $fields['shipping']['shipping_company']['placeholder'] = 'Nom de la société (optionnel)';
     $fields['shipping']['shipping_postcode']['placeholder'] = 'Code postal';
     $fields['shipping']['shipping_phone']['placeholder'] = 'Téléphone';
     $fields['shipping']['shipping_city']['placeholder'] = 'Ville';

     return $fields;
 }

结果: 在此处输入图像描述

于 2019-02-12T18:24:07.087 回答
0

浏览WooCommerce 文档,您可能想尝试使用woocommerce_checkout_fields过滤器而不是woocommerce_default_address_fields

似乎更合乎逻辑,因为上面的字段并不都与地址相关,并且该钩子派生自class-wc-countries.php.

另外,请注意字段名称根据页面的上下文而有所不同,例如,计费页面字段的命名如下:

  • billing_first_name
  • billing_last_name
  • 计费电子邮件
  • 计费电话

希望有帮助!祝你好运。

于 2017-09-20T16:09:35.070 回答