为所有WooCommerce结账字段自定义占位符

9

我正在尝试为我的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;
}

但它不起作用。

你好,我有一个经过测试的关于你问题的可行答案,请尝试一下。欢迎提供反馈意见。谢谢。 - LoicTheAztec
嗨@LoicTheAztec,非常好的答案,谢谢。现在,如何自定义登录字段中的占位符?$fields['account']['account_username']['placeholder'] = __('Email *','woocommerce');应该使用过滤器woocommerce_checkout_fields...但它没有起作用。 - Louis
实际上,这个问题已经在这里发布了:https://stackoverflow.com/questions/57340779/woocommerce-add-placeholder-text-to-login-form-user-field 你能否在那里给我们一个答案? - Louis
@Louis,你的答案在我的账户登录表单上无法工作...我已经回答了...你可以检查一下,如果你喜欢/想要的话,可以给答案点赞。 - LoicTheAztec
3个回答

26

查看官方文档,您会发现在使用woocommerce_default_address_fields过滤器挂钩时,默认地址中没有'phone''email'关键字段。接受的字段键包括:countryfirst_namelast_namecompanyaddress_1address_2citystatepostcode

这就是为什么您可以使用woocommerce_default_address_fields来进行更改的原因。

电子邮件和电话是账单字段,并且可以通过woocommerce_checkout_fields过滤器挂钩获得。它们的名称为(请参阅文档)'billing_phone''billing_phone'……

覆盖它们的正确方法是:

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登录表单用户字段


这就是解决方案!你太棒了,非常感谢。对于所有遇到相同问题的人,请尝试一下这个。 - eMikkelsen
但是如果您想要像ADDRESS_1这样的地址字段是必填项,该怎么办呢?我无法弄清楚。您在哪里放置必填点呢? - amir hanif
1
@amirhanif 你可能需要在第二个钩子函数中(在这个答案代码中)放置 $address_fields['address_1']['required'] = true; - LoicTheAztec
这个答案有错误。如果您想替换电子邮件占位符,请使用 $fields['billing']['billing_email']['placeholder'],而非 $fields['billing']['billing_phone']['placeholder']。 - Laurent
1
@Laurent 刚刚更改了...抱歉。 - LoicTheAztec

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;
 }

结果: 在此输入图片描述


0

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

似乎更合理,因为上面的字段并非全部与地址有关,并且该钩子源自class-wc-countries.php

此外,请注意,根据页面的上下文,字段名称是不同的,例如,账单页面字段的名称如下:

  • billing_first_name
  • billing_last_name
  • billing_email
  • billing_phone

希望这有所帮助!祝你好运。


非常感谢您的帮助!我一开始尝试了这个,但是它没有为任何一个添加占位符。我做错了吗?我已经用您的代码编辑了您的帖子。 - eMikkelsen
@eMikkelsen 我已经编辑了我的原始答案,应该没问题了。 - fyllepo
谢谢你仍然提供帮助。我也尝试了上面的代码,但是改变这些字段并添加billing_并没有起到任何帮助作用。我已经在顶部的编辑中附上了完整的代码。 - eMikkelsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接