2017-03-23 82 views
0

我有一個WordPress的網站,我創建了一個自定義的HTML註冊表單。我在函數文件中使用PHP,在我們的WP用戶表中創建用戶,並通過電子郵件向我們發送表單中的信息。一切都很好,但我們希望以一種新的方式顯示客戶,如果用戶名被佔用。它目前正在工作,我們正在用存在的用戶名testUser來測試它,如果我們嘗試註冊它並點擊提交,它會進入一個索引頁面,該頁面表示它已經存在,然後將客戶重定向回表單以修復它。我們希望在提交之前讓客戶知道這一點,但我是一個有AJAX調用的新手,而且我遇到了麻煩,我希望有另一種方式,這是當前工作的一部分代碼:WordPress的/ PHP - 顯示用戶選擇的用戶名採取選項

if (username_exists($user)){ 

echo 'Username already exists. Please wait while we redirect you back to the form'; 
    die("<meta http-equiv=\"refresh\" content=\"5;url=".$_SERVER['HTTP_REFERER']."\"/>"); 


} 

if (!username_exists($user) && !email_exists($email)) { 
    $user_id = wp_create_user($user, $pass, $email); 
    if(!is_wp_error($user_id)) { 
     //user has been created 
     $user = new WP_User($user_id); 
     $user->set_role('subscriber'); 

     wp_mail($to, $email_subject, $message, $headers); 


     //Redirect 
     wp_redirect('http://www.dev.smithhonig.com/thank-you'); 
     exit; 
    } else { 
     //$user_id is a WP_Error object. Manage the error 
    } 
} 


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

回答

1

爲了向用戶顯示用戶名已被使用或可用,您需要使用desirir進行ajax調用用戶輸入的用戶名。步驟如下:

  1. 檢測用於在註冊表單中輸入用戶名的文本字段的更改。
  2. 發送ajax請求以檢查輸入的用戶名是否可用。
  3. 檢查ajax調用的響應。
  4. 如果用戶名可用,則向用戶顯示一條消息。

將此代碼放在您的主題functions.php

add_action('wp_ajax_verify_username', 'check_username'); 
add_action('wp_ajax_nopriv_verify_username', 'check_username'); 
function check_username(){ 
    $username = $_POST['username']; 
    if(username_exists($username)) { 
     echo $username . ' already taken.'; 
    }else { 
     echo 'Hurray ' . $username . ' is available.'; 
    } 

    exit; 
} 

add_action('wp_ajax_verify_username', 'check_username')將增加來檢查,如果一個Ajax調用與action參數設置爲verify_username做了一個鉤子,如果是的話,它會被處理通過您的functions.php中的函數check_username,我們在下面寫了鉤子。

check_username功能檢查與AJAX調用,並檢查發送username變量的值,如果用戶名已存在使用WP功能username_exists()然後打印對AJAX調用適當的響應。

AJAX調用可以使用下面的代碼進行:

jQuery(document).ready(function(){ 
    jQuery('#username').on('change', function(){ 
     let user = jQuery(this).val(); 
     jQuery.ajax({ 
      type: 'POST', 
      url: '<WP_AJAX_URL_HERE>', 
      data: {action: 'verify_username', username: user}, 
      success: function(data){ 
       console.log(data); 
       // Write code to show the message to user here 
      }, 
      error: function(err){ 
       console.log(err); 
      } 
     }); 
    }); 
}); 

與網站管理員-ajax.php網址

希望幫助更換<WP_AJAX_URL_HERE>。讓我知道你是否需要更多的解釋。 :)

+0

謝謝,我會試試這個,讓你知道!非常感謝 –

+0

對不起,我唯一的困惑是WP-AJAX_URL行,我會在哪裏找到一個wordpress網站的URL? –

+0

http://wordpress.stackexchange.com/questions/190297/ajaxurl-not-defined-on-front-end/190299這可能有幫助 –