我试图从woocommerce中的form-edit-account.php中删除firstname,lastname和email字段但是当我提交表单时,我从woocommerce表单验证中得到了一些错误! 如何删除此字段的验证?我搜索了很多并查看了woocommerce hooks文档,但我找不到有关form-edit-account.php表单验证的所有内容,而且所有这些都是关于结帐字段
https://docs.woocommerce.com/wc-apidocs/hook-docs.html https://docs.woocommerce.com/document/introduction-to-hooks-actions-and-filters/ https://wpthememakeover.com/2016/07/21/how-to-remove-form-fields-in-woocommerce-account-page/
答案 0 :(得分:2)
我刚刚亲自完成了此操作,它就像一种魅力。我知道您的帖子已有一年多的历史了,但是我希望它至少对其他人有帮助,因为那里有很多反对者告诉我这是无法完成的。花了我2个小时的反复试验(无论如何我都不是专家),这就是...
在您的子主题的functions.php文件中,添加以下代码...
//Remove required field requirement for first/last name in My Account Edit form
add_filter('woocommerce_save_account_details_required_fields', 'remove_required_fields');
function remove_required_fields( $required_fields ) {
unset($required_fields['account_first_name']);
unset($required_fields['account_last_name']);
return $required_fields;
}
现在,这仅消除了用户填写姓氏和名字字段的要求,它并没有从表单中删除实际字段本身,但是即使现在的名字和名字也可以立即提交表单姓氏字段留为空白。
要从表单中删除这两个字段,请转到 / wp-content / plugins / woocommerce / templates / myaccount / includes / 并将form-edit-account.php文件下载到桌面
打开文件并注释掉或删除以下代码块(应该是第26至33行,但不要仅依靠#s行)...
<p class="woocommerce-form-row woocommerce-form-row--first form-row form-row-first">
<label for="account_first_name"><?php esc_html_e( 'First name', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_first_name" id="account_first_name" autocomplete="given-name" value="<?php echo esc_attr( $user->first_name ); ?>" />
</p>
<p class="woocommerce-form-row woocommerce-form-row--last form-row form-row-last">
<label for="account_last_name"><?php esc_html_e( 'Last name', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="account_last_name" id="account_last_name" autocomplete="family-name" value="<?php echo esc_attr( $user->last_name ); ?>" />
</p>
然后将该文件上传到子主题下的以下文件夹中……
/ wp-content / themes /您的儿童主题文件夹/ woocommerce / myaccount /
您很高兴!
您没有将文件上传到 / wp-content / themes /您的孩子主题文件夹/ woocommerce / templates / myaccount / includes / 中以匹配插件子文件夹。您必须使用如上所述的子文件夹字符串。这就是必须的方式,并且在文件注释中说得很对:)如果将其上载到子文件夹以匹配原始文件所在的插件子文件夹,则将无法使用。
答案 1 :(得分:1)
This is the guide you should be following。 不直接编辑form-edit-account.php
。添加代码以删除custom functions file中的字段。
示例:
// Hook in
add_filter( 'woocommerce_default_address_fields' , 'custom_override_checkout_fields' );
// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_first_name']);
return $fields;
}
答案 2 :(得分:1)
在arrayList.sort((a1, a2) -> a1.compareTo(a2));
上直接在模板中对字段进行硬编码。
没有删除,取消设置或隐藏此字段的钩子......
最好的选择应该是用CSS隐藏它们......
为此,您可以在活动主题的styles.css ile中添加此CSS规则:
/myaccount/form-edit-account.php
这将删除(隐藏)字段...当客户提交表单时,如果这些隐藏字段包含某些数据(隐藏),则不会出现任何错误。
这只会避免客户对其相关数据进行更改。他只能更改密码。
您可以直接从模板中删除它们,但所有这些字段确实需要使WooCommerce / WordPress正常运行,因为每个注册用户的名字都是名字,尤其是电子邮件强> ...
答案 3 :(得分:1)
有一个带有“ Chuck D”答案的隐藏警告:
在WooCommerce核心的文件class-wc-form-handler.php
中,第221行:
$account_first_name = ! empty( $_POST['account_first_name'] ) ? wc_clean( wp_unslash( $_POST['account_first_name'] ) ) : '';
$account_last_name = ! empty( $_POST['account_last_name'] ) ? wc_clean( wp_unslash( $_POST['account_last_name'] ) ) : '';
$account_display_name = ! empty( $_POST['account_display_name'] ) ? wc_clean( wp_unslash( $_POST['account_display_name'] ) ) : '';
$account_email = ! empty( $_POST['account_email'] ) ? wc_clean( wp_unslash( $_POST['account_email'] ) ) : '';
正在寻找那些字段值,如果找不到,则假定它们是空字符串。这意味着,如果使用此方法,则每次在用户的帐户页面中保存用户帐户详细信息时,WooCommerce都会清空上述字段。 解决方案是以某种方式摆脱上面的内容,或者使用“ LoicTheAztec”提到的CSS技巧。