2014-02-18 36 views
0

我想用Wordpress和jQuery驗證插件做一些表單驗證。我的js代碼是:WordPress的WordPress管理員阿賈克斯 - 有時工作,有時不

<script type="text/javascript"> 
    var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>"; 

    // submit reg-form 
    jQuery(document).ready(function ($) { 
     $.ajaxSetup({ 
      cache: false 
     }); 

     $("#username").change(function(){ 
      $("#username").removeData("previousValue"); 
     }); 

     $("#moto_register").validate({ 
      ignore: "", 
      rules: { 
       username: { 
        remote: { 
         url: ajaxurl, 
         type: "post", 
         data: { 
          username: function() { 
           return $("#username").val(); 
          }, 
          action: 'moto_validate_username' 
         } 
        } 
       }, 
      }, 
      submitHandler: function(form) { 
       var sData = $(form).serialize(); 
       $.ajax({ 
        url: ajaxurl, 
        async: false, 
        type: 'POST', 
        data: sData, 
        success: function (data) { 
         if (console.log) console.log(data); 

         location.href = "http://test.net/?page_id=30 " 
        } 
       }); 
      } 
     }); 

IM的WordPress插件我有以下代碼:

function moto_validate_username() { 
$user_id = username_exists($_POST['username']); 
if (!$user_id) echo 'true'; 
else echo 'false'; 
exit(); 
} 
add_action('wp_ajax_nopriv_moto_validate_username', 'moto_validate_username'); 
add_action('wp_ajax_moto_validate_username', 'moto_validate_username'); 

有時這只是工作的,有時沒有。 AJAX似乎被解僱了,但沒有迴應,所以沒有驗證。任何人有一個想法爲什麼?

回答

0

該問題似乎是爲非管理員用戶刪除頁面。當我將其更改爲:

function moto_remove_menu_pages() { 

    global $user_ID; 
    if (!$_POST['action'] == 'moto_validate_username') { 
     if ($user_ID != '1') { 
      remove_menu_page('edit.php'); // Posts 
      remove_menu_page('upload.php'); // Media 
      remove_menu_page('link-manager.php'); // Links 
      remove_menu_page('edit-comments.php'); // Comments 
      remove_menu_page('edit.php?post_type=page'); // Pages 
      remove_menu_page('plugins.php'); // Plugins 
      remove_menu_page('themes.php'); // Appearance 
      remove_menu_page('tools.php'); // Tools 
      remove_menu_page('options-general.php'); // Settings 
      remove_submenu_page('index.php', 'update-core.php'); 
     } 
    } 
} 
add_action('admin_init', 'moto_remove_menu_pages'); 

它神奇地開始工作。

1

你應該避免admin_init鉤去掉menu_pagessubmenu_pages,因爲它可以創建具有AJAX衝突(見https://wordpress.org/support/topic/conflict-with-ajax-due-to-debug-warning)。

代替綁定到admin_menu掛鉤。如果您在刪除某些頁面時遇到問題,請使用非常高的優先級進行綁定。例如。除去theme-editor.php你需要設置的約120。Jetpack的頁面很重要,您需要在2000年左右

add_action('admin_menu', 'moto_remove_menu_pages', 2000); 

財產以後這也是在Wordpress Codex說明。