add_filter() не работает при проверке формы регистрации LearnPress

Мне нужно добавить несколько полей в регистрационную форму LearnPress, и все работает нормально, единственная проблема - я хочу оставить одно поле "Компания" в качестве необязательного поля. Но по каким-то странным причинам я не могу этого сделать. Вот что я сделал, чтобы добавить дополнительные поля

add_filter( 'learn-press/register-fields', 'crf_registration_form' );
function crf_registration_form($fields) {

$extra_fields = array ( 'phone_no'=> array(
                    'title'       => __( 'Phone', 'learnpress' ),
                    'type'        => 'text',
                    'placeholder' => __( 'Phone', 'learnpress' ),
                    'saved'       => LP_Request::get_string( 'phone_no' ),
                    'id'          => 'phone_no',
                    'required'    => true
                ),
                    'country' =>  array(
                    'title'       => __( 'Country', 'learnpress' ),
                    'type'        => 'text',
                    'placeholder' => __( 'Country', 'learnpress' ),
                    'saved'       => LP_Request::get_string( 'country' ),
                    'id'          => 'country',
                    'required'    => true
                ),
                    'company' =>  array(
                    'title'       => __( 'Company', 'learnpress' ),
                    'type'        => 'text',
                    'placeholder' => __( 'Company', 'learnpress' ),
                    'saved'       => LP_Request::get_string( 'company' ),
                    'id'          => 'company',
                    'required'    => false

                )
        );

$fields = array_merge($fields, $extra_fields);

return $fields;
}

А вот и основная часть

add_filter( 'learn-press/register-validate-field', 'validate_extra_fields' , 10, 3);
function validate_extra_fields($name, $field, $value){
    $validate = false;
    if ($name === 'company' ) {

        $validate = true;   
        }
    return $validate;

}

Функция, на которую я ссылаюсь, доступна в LearnPress "learnpress / inc / class-lp-forms-handler.php" ниже

public static function process_register() {
        if ( ! LP_Request::verify_nonce( 'learn-press-register' ) ) {
            return;
        }

        add_filter( 'learn-press/register-validate-field', array(
            __CLASS__,
            'register_validate_field'
        ), 10, 3 );

        $fields      = LP_Shortcode_Register_Form::get_register_fields();
        $field_names = wp_list_pluck( $fields, 'id' );
        $args        = call_user_func_array( array( 'LP_Request', 'get_list' ), $field_names );

        $result = array(
            'message' => array(),
            'result'  => 'success'
        );

        foreach ( $fields as $field ) {
            $name     = $field['id'];
            $validate = apply_filters( 'learn-press/register-validate-field', $name, $field, $args[ $name ] );

            if ( is_wp_error( $validate ) ) {
                learn_press_add_message( $validate->get_error_message(), 'error' );

                $result['message'][ $name ] = learn_press_get_message( $validate->get_error_message(), 'error' );
                $result['result']           = 'error';
            } elseif ( ! $validate ) {
                $message = sprintf( __( 'Field "%s" is required.', 'learnpress' ), $field['title'] );

                learn_press_add_message( $message, 'error' );

                $result['message'][ $name ] = learn_press_get_message( $message, 'error' );
                $result['result']           = 'error';
            }
        }

        remove_filter( 'learn-press/register-validate-field', array(
            __CLASS__,
            'register_validate_field'
        ) );

        if ( $result['result'] === 'success' ) {

            $new_user = apply_filters( 'learn-press/new-user-data', array(
                'user_login' => $args['reg_username'],
                'user_pass'  => isset( $args['reg_password'] ) ? $args['reg_password'] : '',
                'user_email' => $args['reg_email']
            ) );

            $user_id = wp_insert_user( $new_user );

            if ( is_wp_error( $user_id ) ) {
                $result['result'] = 'error';
                foreach ( $user_id->get_error_messages() as $code => $message ) {
                    $result['message'][ $code ] = learn_press_get_message( $message, 'error' );

                    learn_press_add_message( $message, 'error' );
                }
            } else {
                wp_new_user_notification( $user_id );
            }
        }

        $result = apply_filters( 'learn-press/register-request-result', $result );

        if ( $result['result'] === 'success' ) {
            $message             = __( 'Register successfully.', 'learnpress' );
            $result['message'][] = learn_press_get_message( $message, 'success' );

            learn_press_add_message( $message, 'success' );

            $logged = wp_signon( array(
                'user_login'    => $args['reg_username'],
                'user_password' => $args['reg_password']
            ) );
        }

        learn_press_maybe_send_json( $result, 'learn_press_print_messages' );

        if ( ( $result['result'] === 'success' ) && $redirect = LP_Request::get_redirect( learn_press_get_current_url() ) ) {
            wp_redirect( $redirect );
            exit();
        }
    }

    public static function register_validate_field( $name, $field, $value ) {
        $validate = ! ! $value;

        if ( $validate && $name === 'reg_password' ) {
            try {
                if ( strlen( $value ) < 6 ) {
                    throw new Exception( __( 'Password is too short!', 'learnpress' ), 100 );
                }

                if ( preg_match( '#\s+#', $value ) ) {
                    throw new Exception( __( 'Password can not have spacing!', 'learnpress' ), 110 );
                }

                if ( ! preg_match( "#[a-zA-Z]+#", $value ) ) {
                    throw new Exception( __( 'Password must include at least one letter!', 'learnpress' ), 120 );
                }

                if ( ! preg_match( "#[A-Z]+#", $value ) ) {
                    throw new Exception( __( 'Password must include at least one capitalized letter!', 'learnpress' ), 125 );
                }

                if ( ! preg_match( "#[0-9]+#", $value ) ) {
                    throw new Exception( __( 'Password must include at least one number!', 'learnpress' ), 125 );
                }

                if ( ! preg_match( '#[~!@\#$%^&*()]#', $value ) ) {
                    throw new Exception( __( 'Password must include at least one of these characters ~!@#$%^&*() !', 'learnpress' ), 125 );
                }
            } catch ( Exception $ex ) {
                $validate = new WP_Error( $ex->getCode(), $ex->getMessage() );
            }
        }

        return $validate;
    }

если я напрямую изменю плагин и добавлю условие ниже

if ($name === 'company' ) {             
    $validate = true;   
}

после "$validate = ! ! $value;"Это работает отлично. Но когда я использую фильтр, он не работает. Я не уверен, что я делаю здесь неправильно, я даже пытался проверить, корректен ли фильтр, и выводит ли все имена полей, если я это делаю"print_r msgstr "но он не выводит $validate.

0 ответов

Другие вопросы по тегам