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.