更新:エラーは単純なタイプミスでした。この質問は無視してください。
一部のフォームを検証するために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();
}
}
}
},
}
});
答えはあなたの質問とエラーメッセージで正しいです。
コードのこの部分を見てください:
_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つだけ)。