在Woocommerce结账中使结账字段为必填项

7

由于某些原因,结算地址中的所有字段都被标记为可选 - 客户将结算地址字段留空,然后他们的付款被他们的支付处理器Square拒绝了。

我找不到任何地方可以使这些字段必填,并且无法弄清楚为什么它们无论如何都标记为可选。

有人能指点我正确的方向吗?

更新

我甚至尝试了以下操作:

add_filter('woocommerce_billing_fields', 'force_billing_fields', 1000, 1);
function force_billing_fields($fields) {
  $fields['billing_first_name']['required'] = true;
  $fields['billing_last_name']['required'] = true;
  $fields['billing_address_1']['required'] = true;
  $fields['billing_city']['required'] = true;
  $fields['billing_postcode']['required'] = true;
  $fields['billing_country']['required'] = true;
  $fields['billing_state']['required'] = true;
  $fields['billing_email']['required'] = true;
  $fields['billing_phone']['required'] = true;

  return $fields;
}

除了账单电话和国家必填之外,它们仍然被标记为可选。但是其余部分仍然是可选的。


有些东西使这些字段变成了可选项,因为默认情况下它们是必填的。因此,您需要找到罪魁祸首,可能是自定义、主题或插件中的某些内容。您还可以查看使用操作和过滤器自定义结帐字段的教程,或在相关线程中搜索 - LoicTheAztec
1
显然...我已经搜索了所有自定义代码,也没有在任何地方修改这些字段。我会查看插件并找出问题所在。 - daniel0mullins
@LoicTheAztec,请查看更新。 - daniel0mullins
1个回答

10
如果您在我的评论中所解释的那样找不到罪犯,您可以使用以下内容(如果其他代码已经在使用这些钩子,则使用较高的挂钩优先级):
add_filter( 'woocommerce_default_address_fields', 'customising_checkout_fields', 1000, 1 );
function customising_checkout_fields( $address_fields ) {
    $address_fields['first_name']['required'] = true;
    $address_fields['last_name']['required'] = true;
    $address_fields['company']['required'] = true;
    $address_fields['country']['required'] = true;
    $address_fields['city']['required'] = true;
    $address_fields['state']['required'] = true;
    $address_fields['postcode']['required'] = true;

    return $address_fields;
}

代码应放在您当前使用的子主题(或活动主题)的function.php文件中。已测试并且可以正常工作。

对于计费电话和电子邮件,您可以尝试

add_filter('woocommerce_billing_fields', 'custom_billing_fields', 1000, 1);
function custom_billing_fields( $fields ) {
    $fields['billing_email']['required'] = true;
    $fields['billing_phone']['required'] = true;

    return $fields;
}

或者

add_filter('woocommerce_checkout_fields', 'custom_billing_fields', 1000, 1);
function custom_billing_fields( $fields ) {
    $fields['billing']['billing_email']['required'] = true;
    $fields['billing']['billing_phone']['required'] = true;

    return $fields;
}

我已经添加了一些其他的钩子来处理账单邮件和电话... - LoicTheAztec
1
此外,我在所有插件中搜索了 add_filter('woocommerce',但没有任何插件钩住这些字段过滤器... 这非常奇怪。 - daniel0mullins
1
为什么我们要放1000?我正在尝试解决方案,但它不起作用 :( - Maria Georgali
@MariaGeorgali 1000是钩子优先级,它允许在使用相同钩子的其他插件之后运行此代码。 - LoicTheAztec
我已经尝试将其优先级设置为100000000,但仍然没有效果,尝试了不同的过滤器,它比约会网站上的女孩更无视我。 - Erik Kubica

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