2016-12-28 21 views
0

ユーザーがサイトに登録できるajaxモーダルサインアップフォームを実装しようとしています。私はログインフォームを動作させることができましたが、私は登録時に悩まされています。私は自分のログインモーダルテンプレートを参考にしました。どこで私は間違えましたか?投稿時にAjaxユーザー登録に失敗する

UPDATE私はデータベースを使用してユーザーを登録することができました。私は以下のコードを更新しました。今はほとんどありません。

  1. ページdoesntのは、登録
  2. 時にホームページにリダイレクトそれは私が
  3. はphpMyAdminは、パスワード、ユーザーの入力を確認するページを更新しないときにユーザーがログインしているdoes notの(データベース内で発見されたものではありませんランダムな文字列があります)
  4. このランダムな文字列または登録されたパスワードを使用すると、ログインに失敗します。

マイHTML。

<div id="signup-body" class="toggleMe"> 
        <form class="form" id="signupform" role="form" name="signupform" action="" method="post"> 
         <p class="status"></p> <!-- testing the status --> 
         <div class="form-group"> 
          <label class="sr-only" for="signup-name">Username</label> 
          <input type="text" class="form-control" id="signupname" name="signup-name" placeholder="Username"> 
         </div> 
         <!-- Form Group --> 
         <div class="form-group"> 
          <label class="sr-only" for="signup-email">Email</label> 
          <input type="email" class="form-control" id="signupemail" name="signup-email" placeholder="Email"> 
         </div> 
         <div class="form-group"> 
          <label class="sr-only" for="signup-password">Password</label> 
          <input type="password" class="form-control" id="signuppassword" name="signup-password" placeholder="Password"> 
         </div> 
         <!-- Form Group --> 

         <input type="submit" class="btn btn-secondary signup-modal-button" value="Sign Up"> 
         <?php wp_nonce_field('ajax-login-nonce', 'security'); ?> 
        </form> 
       </div> 

jQueryのコード

jQuery(document).ready(function($) { 

    // Perform AJAX login on form submit 
    $('form#signupform').on('submit', function(e){ 
     $('form#signup p.status').show().text('Sending user info, please wait...'); 
     $.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      url: "<?php echo admin_url('admin-ajax.php');?>", 
      data: { 
       action: 'register_user', //calls wp_ajax_nopriv_ajaxlogin 
       'username': $('form#signupform #signupname').val(), 
           'email': $('form#signupform #signupemail').val(), 
       'password': $('form#signupform #signuppassword').val(), 
       'security': $('form#signupform #security').val() }, 

      success: function(data){ 
        console.log(data); 
       $('form#signup p.status').text(data.message); 
       if (data.loggedin == true){ 
        document.location.href = ajax_login_object.redirecturl; 
       } 
      },error: function (data) { 
       console.log(data); 
      } 

     }); 
     e.preventDefault(); 
    }); 

}); 

のfunctions.phpで

function ajax_signup_init(){ 

wp_register_script('ajax-signup-script', get_template_directory_uri() . '/assets/js/ajax-signup-script.js', array('jquery')); 
wp_enqueue_script('ajax-signup-script'); 

wp_localize_script('ajax-signup-script', 'ajax_signup_object', array(
    'ajaxurl' => admin_url('admin-ajax.php'), 
    'redirecturl' => home_url(), 
    'loadingmessage' => __('Sending user info, please wait...') 
)); 

// Enable the user with no privileges to run ajax_login() in AJAX 

} 
add_action('init', 'ajax_signup_init'); 

function ajax_signup(){ 

    // First check the nonce, if it fails the function will break 
    check_ajax_referer('ajax-login-nonce','security'); 

    // Nonce is checked, get the POST data and sign user on 
    $info = array(); 
    $info['user_login'] = $_POST['username']; 
    $info['user_email'] = $_POST['email']; 
    $info['user_password'] = $_POST['password']; 
    $info['remember'] = true; 


    $user_signup = wp_insert_user($info); 

    if (!is_wp_error($user_signup)){ 
     echo "User created : ". $user_signup; 
    } 

    die(); 
} 

add_action('wp_ajax_register_user', 'ajax_signup'); 
add_action('wp_ajax_nopriv_register_user', 'ajax_signup'); 

答えて

1

あなたのajaxコールバック関数は以下のようになります。

 function ajax_signup(){ 

      // First check the nonce, if it fails the function will break 
      check_ajax_referer('ajax-login-nonce','security'); 

      // Nonce is checked, get the POST data and sign user on 
      $info = array(); 
      $info['user_login'] = $_POST['username']; 
      $info['user_email'] = $_POST['email']; 
      $info['user_password'] = $_POST['password']; 
      $info['remember'] = true; 


      $user_signup = wp_insert_user($info); 

      if (!is_wp_error($user_signup)){ 
       echo json_encode(array('loggedin'=>true, 'message'=>__('Sign up successful, redirecting...'))); 
      } else { 
       echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong username or password.'))); 
      } 
      wp_set_current_user($user_signup); 
      wp_set_auth_cookie($user_signup); 
      die(); 
     } 

     add_action('wp_ajax_ajax_login', 'ajax_login'); 
     add_action('wp_ajax_nopriv_ajax_login', 'ajax_login'); 

コードにこれらの2つを追加する必要があります。

wp_set_current_user($user_signup); 
    wp_set_auth_cookie($user_signup); 
+0

ありがとうございました。 –

0

まずあなたがid属性を持つ要素の完全なパスを使用する必要はありませんjQueryを使用すると、その処理が難しくなり、より多くのリソースが使用されます。

data: { 
    action: 'register_user', //calls wp_ajax_nopriv_ajaxlogin 
    'username': $('#signupname').val(), 
    'email': $('#signupemail').val(), 
    'password': $('#signuppassword').val(), 
    'security': $('#security').val() 
}, 

同じIDを持つ要素がさらに多い場合は、やっていることをやめ、id属性について読んでください。

次に成功コールバックでは、有効なJSON出力をajax_signup関数にエコーしたことはありませんが、値data.loggedinを使用します。リダイレクトがないのはおそらく理由でしょう。

データがデータベースに正しく書き込まれていない理由は、var_dump($_POST)を使用し、開発者ツールのネットワークタブ上の応答を確認するため。要求の前にこれを開いて、キャプチャされていることを確認することができます。

最終私は長い時間のためのWordpressを使用していないので、私は間違っているかもしれないが、あなただけwp_insert_userを使用するので、ユーザーがログインして返す方法はありません、あるいは少なくともそれが文書化されていない:https://developer.wordpress.org/reference/functions/wp_insert_user/

+0

これまでのおかげで、私は「データ」セクションを編集しました。私はまだ一種の新しい本に私はのためにエコーを追加する方法は非常にわからないんだけどね 'ajax_signup'またはあなたが助けることができるであろう場所を正確' var_dump'にコーディングしますか? –

+0

'のvar_dump($ _ POST)が' 'ajax_signup'関数本体に追加する必要があります。 –

+0

私の 'localhostを白い画面にした' var_dump'のため、 '\t echo"

" . print_r($_POST, true) . "
";を' ajax_signup'に入れました。ネットワークタブでは何を探していますか?私はsubmitをクリックするたびにadmin-ajax phpが呼び出されるのを確認します。 –

関連する問題