web-dev-qa-db-ja.com

is_user_logged_in()がAJAX検証呼び出しで機能しない

更新:エラーは単純なタイプミスでした。この質問は無視してください。

一部のフォームを検証するためにjQuery検証プラグインを使用しています。 is_user_logged_in()関数を使用して何かを検証しようとすると、PHPで次のエラーが発生します。

PHPの致命的なエラー:キャッチされないエラー:未定義の関数is_user_loggged_in()の呼び出し

これはWordPress読み込み順序の問題であることは知っていますが、最善の解決策は何なのかわかりません。

私のコードは次のようになります。 wp_ajaxフックから呼び出される検証関数を内部に持つクラス。

// 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();
}

そしてjQueryで検証アクションを次のように呼び出します:

$('#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

答えはあなたの質問とエラーメッセージで正しいです。

コードのこの部分を見てください:

_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...
}
_

そこにタイプミスがあります。 is_user_loggged_in()を使用していて、実際にはそのような関数はありません。 is_user_logged_in()でなければなりません( 'g'は2つだけ)。

2