Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提交后重新设置注册表字段(wordpress&;woocommerce)_Php_Wordpress_Forms_Woocommerce_Form Verification - Fatal编程技术网

Php 提交后重新设置注册表字段(wordpress&;woocommerce)

Php 提交后重新设置注册表字段(wordpress&;woocommerce),php,wordpress,forms,woocommerce,form-verification,Php,Wordpress,Forms,Woocommerce,Form Verification,我有两个部分的商业登记表: -一个供私人使用, -另一个是公司的。 在“公司”选项中,有两个附加字段。我可以通过单选按钮在私人和公司之间切换,然后我可以看到相关字段 问题:当我填写表单(作为私人用户)并出错时,重新加载表单并显示错误的位置(这是可以的) 但不幸的是,在重新加载后,它会加载包含所有字段的表单(也包括包含其他公司字段的字段)。所以我需要在private和company之间单击两次以恢复正确的行为 我怎样才能解决这个问题?我的意思是,在这个错误重新加载之后,将表单显示为初始状态 我不确

我有两个部分的商业登记表:
-一个供私人使用,
-另一个是公司的。

在“公司”选项中,有两个附加字段。我可以通过单选按钮在私人和公司之间切换,然后我可以看到相关字段

问题:当我填写表单(作为私人用户)并出错时,重新加载表单并显示错误的位置(这是可以的)

但不幸的是,在重新加载后,它会加载包含所有字段的表单(也包括包含其他公司字段的字段)。所以我需要在private和company之间单击两次以恢复正确的行为

我怎样才能解决这个问题?我的意思是,在这个错误重新加载之后,将表单显示为初始状态

我不确定这段代码是否对此负责,但让我们试试:

add_filter('woocommerce_registration_errors', 'rs_registration_form_validation', 10, 3);
function rs_registration_form_validation($reg_errors, $sanitized_user_login, $user_email)
{
    global $woocommerce;

    $company_fields_required = (!empty($_POST['registration_type']) && 'company' === $_POST['registration_type']);
    $shipp_to_different_address = (!empty($_POST['register_ship_to_different_address']) && 1 == $_POST['register_ship_to_different_address']);

    $errors = false;
    $fields = rs_registration_form_fields();
    if ($shipp_to_different_address) {
        $fields += rs_registration_form_fields_address();
    }

    if (!$company_fields_required) {
        unset($fields['billing_company']);
        unset($fields['billing_nip']);
    }

    //Validate required
    foreach ($fields as $field => $settings) {
        if (false === isset($settings['required']) || true === $settings['required']) {
            if (empty($_POST[$field])) {
                $errors = true;
                wc_add_notice('Pole: <strong>'.$settings['label'].'</strong> jest wymagane.', 'error');
            }
        }
    }

    if ($errors) {
        return new WP_Error('registration-error', 'Proszę poprawić błędy w formularzu');
    }

    return $reg_errors;
}

add_action('woocommerce_created_customer', 'rs_registration_form_submit');
function rs_registration_form_submit($user_id)
{
    $fields = rs_registration_form_fields();
    $fields += rs_registration_form_fields_address();

    foreach ($fields as $field => $settings) {
        if (isset($_POST[$field]) && !empty($_POST[$field])) {
            update_user_meta($user_id, $field, $_POST[$field]);
        }
    }
}

add_filter('register_form', 'rs_registration_form');
function rs_registration_form()
{
    $fields = rs_registration_form_fields();

    include '_rs_registration_form.php';
}

add_filter('register_form_address', 'rs_registration_form_address');
function rs_registration_form_address()
{
    $fields = rs_registration_form_fields_address();

    include '_rs_registration_form.php';
}

add_filter('woocommerce_edit_address_slugs', 'rs_fix_address_slugs');
function rs_fix_address_slugs($slugs)
{
    $slugs['billing'] = 'billing';
    $slugs['shipping'] = 'shipping';

    return $slugs;
}

function rs_rejestracja_url()
{
    return get_permalink(244);
}

function rs_logowanie_url()
{
    return get_permalink(20);
}

function rs_show_checkout_progress_bar($step = '')
{
    include '_checkout_progress_bar.php';
}

function rs_order_form_buttons()
{
    include '_order_form_buttons.php';
}

add_filter('woocommerce_get_checkout_url', 'rs_get_checout_url');
function rs_get_checout_url($url) {
    if (is_user_logged_in()) {
        $url .= '#step1';
    }

    return $url;
}

include 'src/RS_Search.php';
add_filter('woocommerce_registration_errors','rs_registration_form_validation',10,3);
功能注册表单验证($reg\u错误,$sanitized\u用户登录,$user\u电子邮件)
{
全球商业;
$company\u fields\u required=(!空($\u POST['registration\u type'])和&'company'==$\u POST['registration\u type']);
$shipp_to_different_address=(!空($_POST['register_ship_to_different_address'])和&1=$_POST['register_ship_to_different_address']);
$errors=false;
$fields=rs_registration_form_fields();
如果($shipp_至不同地址){
$fields+=rs_注册表_表单_字段_地址();
}
如果(!$company\u字段\u必填){
未设置($fields['billing_company']);
未设置($fields['billing_nip']);
}
//需要验证
foreach($fields作为$field=>$settings){
if(false==isset($settings['required'])| | true===settings['required'])){
if(空($\u POST[$field])){
$errors=true;
wc_add_notice('Pole:。$settings['label'.jest wymagane.,'error');
}
}
}
如果($errors){
返回新的WPęu错误(“注册错误”,“Proszępoprawićbłdy w formularzu”);
}
返回$reg_错误;
}
添加行动(“商业、创建、客户”、“注册、表格、提交”);
功能注册表格提交($user\u id)
{
$fields=rs_registration_form_fields();
$fields+=rs_注册表_表单_字段_地址();
foreach($fields作为$field=>$settings){
if(设置($\u POST[$field])&&!空($\u POST[$field])){
更新_user_meta($user_id,$field,$_POST[$field]);
}
}
}
添加过滤器(“登记表”、“rs登记表”);
功能注册表格()
{
$fields=rs_registration_form_fields();
包括“_rs_registration_form.php”;
}
添加过滤器(“登记表地址”、“rs登记表地址”);
函数rs\u注册\u表单\u地址()
{
$fields=rs_registration_form_fields_address();
包括“_rs_registration_form.php”;
}
添加过滤器(“编辑地址片段”、“修复地址片段”);
函数rs\u fix\u address\u slug($slug)
{
$slug['billing']='billing';
$slug['shipping']='shipping';
返回$slug;
}
函数rs_rejestracja_url()
{
返回get_permalink(244);
}
函数rs_logowanie_url()
{
返回get_permalink(20);
}
函数rs\u show\u checkout\u progress\u bar($step='')
{
包括“_checkout_progress_bar.php”;
}
功能rs\ U顺序\形式\按钮()
{
包括“_order_form_buttons.php”;
}
添加过滤器(“woocommerce\u get\u checkout\u url”、“rs\u get\u checout\u url”);
函数rs_get_checout_url($url){
如果(用户是否已登录){
$url.='#步骤1';
}
返回$url;
}
包括“src/RS_Search.php”;

我不知道WooCommerce,但我认为错误是由以下几行引起的:

$company_fields_required = (!empty($_POST['registration_type']) && 'company' === $_POST['registration_type']);

提交“私有”表单且验证失败后,将再次加载字段。现在,在$\u POST变量中,注册类型是否以某种方式设置为“company”?如果您只需在函数开头打印$\u POST['registration\u type'],就可以测试这一点。如果不是这样的话,那么我很确定这个bug发生在另一个函数中,因为到目前为止这对我来说是有意义的


编辑:在再次查看您的代码之后,我认为所有发布的函数都不对错误行为负责。第一个函数只负责检查是否缺少一些已发布的值,并说“嘿,这是一个错误”。必须有另一个函数负责以后在HTML中显示的字段。我想你需要找到这个函数。

好的。这是注册表格模板的代码。。。你能从中推断出什么吗?是的,我想我能。您的自定义字段可能显示在用户名、密码等输入之后。这意味着它们是用hook\u register\u表单或register\u表单插入的。创建并负责自定义字段的函数必须使用这两个钩子之一。您现在是否能够找到正确的函数?
if (!$company_fields_required) {
    unset($fields['billing_company']);
    unset($fields['billing_nip']);
}