web-dev-qa-db-fra.com

is_user_logged_in () ne fonctionne pas dans AJAX appel de validation

Mise à jour: l'erreur était une simple faute de frappe, ignorez cette question.

J'utilise le plugin de validation jQuery pour valider certains formulaires. Lorsque j'essaie de valider quelque chose à l'aide de la fonction is_user_logged_in(), j'obtiens l'erreur suivante en PHP:

Erreur fatale PHP: erreur non interceptée: appel à la fonction non définie is_user_loggged_in ()

Je sais que c'est un problème avec WordPress ordre de chargement, mais je ne sais pas quelle serait la meilleure solution.

Mon code ressemble à ceci. Une classe avec une fonction de validation à l'intérieur, qui est appelée à partir de wp_ajax crochets.

// Class containing validation function
class NS_User_System_Password_Settings {    

    // ...

    public function validate_current_password( $current_password = NULL ) {
        // Check if logged in
        if ( !is_user_loggged_in() ) {
            return $this->get_error( 'not_logged_in' );
        }

        // Rest of validation...
    }

    // ...
}

// Action hook for AJAX validation
add_action( 'wp_ajax_ns_account_settings_current_password_validation_callback', 'ns_account_settings_current_password_validation_callback' );
add_action( 'wp_ajax_nopriv_ns_account_settings_current_password_validation_callback', 'ns_account_settings_current_password_validation_callback' );
function ns_account_settings_current_password_validation_callback() {
    $validate_current_password = NS_User_System_Password_Settings()->validate_current_password( $_POST['current_password'] );

    if ( is_wp_error( $validate_current_password ) ) {
        echo json_encode( $validate_current_password->get_message() );
    } else {        
        echo json_encode( true );
    }

    wp_die();
}

Et dans jQuery j'appelle l'action de validation comme ceci:

$('#account-settings-password-form').validate({
    submitHandler: function(form) {
        $.ajax({
            url: ajax_url,
            type: 'POST',
            data: $(form).serialize(),
            success: function(response) {
                // ...              
            },
            complete: function() {                      
                // ...
            }
        });
    },  
    rules: {
        current_password: {
            required: true,
            minlength: 6,
            maxlength: 60,
            remote: {
                url: ajax_url,
                type: 'post',
                data: {
                    'action': 'ns_account_settings_current_password_validation_callback',
                    'current_password': function() {
                        return $('#account-current-password').val();
                    }
                }
            }   
        },
    }
});
1
Swen

La réponse est juste dans votre question et dans le message d'erreur.

Jetez un œil à cette partie de votre code:

public function validate_current_password( $current_password = NULL ) {
    // Check if logged in
    if ( !is_user_loggged_in() ) {
        return $this->get_error( 'not_logged_in' );
    }

    // Rest of validation...
}

Vous avez une faute de frappe là-dedans. Vous utilisez is_user_loggged_in() et il n'y a vraiment pas une telle fonction. Ce devrait être is_user_logged_in() (seulement deux 'g').

2
Krzysiek Dróżdż