2

カスタム WordPress テーマの一部としてフロントエンドのユーザー登録フォームを作成しているときに問題が発生しました。ユーザーの登録を許可する前に、ajax リクエストを含む電子メールが存在するかどうかを確認できるようにする必要があります。

ここに JS があります。私は jQuery Validate プラグインを使用しており、addMethod を使用して .validate 呼び出しに挿入しています。コードは次のとおりです。

function chk_email(value){
  var response;
  $.ajax({
    async: false,
    url: ajaxurl,
    type: 'POST',
    data: {action: 'chk_email', email: value},
    dataType: "text",
    success: function(msg) {
      if (msg>0) {
        response = true;
      } else{
        response = false;
      }
    }
  })
  console.log(response);
  return response;
}


$.validator.addMethod('chk_email', chk_email, "This email address has already been registered");

$("#adduser").validate({
  // debug: true,
  rules: {
    user_login: {
      required: true,
      minlength: 3,
      nowhitespace: true,
      alphanumeric: true
    },
    first_name: {
      required: true,
    },
    last_name: {
      required: true,
    },
    user_email: {
      required: true,
      email: true,
      nowhitespace: true,
      // remote: { url: ajaxurl, type: 'post' }
      chk_email: true
    },
    tel: {
      required: true,
      phoneUS: true
    },
    street_address: {
      required: true
    },
    locality: {
      required: true
    },
    region: {
      required: true
    },
    postal_code: {
      required: true
    },
  },
  messages: {
    user_login: {
      required: "Required",
      user_login: "A username needs to be atleast 3 charachters long."
    },
    user_email: {
      required: "We need your email address to contact you",
      user_email: "Your email address must be in the format of name@domain.com",
      nowhitespace: "yeah"
    },
  },
  errorElement: 'span',
  errorClass: 'help-inline',
  errorPlacement: function(error, element) {
    error.insertAfter(element);
  },
  highlight: function(element) {
    var parent = $(element).parents('.control-group');
    $(element).addClass('error');
    $(parent).addClass('error');
  },
  unhighlight: function(element) {
    var parent = $(element).parents('.control-group');
    $(element).removeClass('error');
    $(parent).removeClass('error');
  }
  // debug: true
});

そして、functions.php ファイル内で使用している PHP は次のとおりです。

add_action('wp_ajax_nopriv_chk_email', 'chk_email');

function chk_email(){  
  if (email_exists($_POST['email']) ){
    // return TRUE;
    echo 'true';
  } else {
    // return FALSE;
    echo 'false';
  }
}

ここで何が間違っているのかよくわかりません。ご意見をいただければ幸いです。

4

1 に答える 1

0

http://docs.jquery.com/Plugins/Validation/Methods/remote

概要と例を確認してください。

の代わりにchk_email()、オプションに次のように追加しremoteます。

remote: {
    url: ajaxurl,
    type: "post"
}
于 2012-06-19T05:38:21.647 に答える