2014-02-18 2 views
0

Я пытаюсь выполнить некоторую проверку формы с помощью Wordpress и jQuery Validate plugin. Мой JS код:Wordpress wp admin ajax - иногда работает, иногда нет

<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_pages и submenu_pages, потому что это может привести к конфликтам с AJAX (см https://wordpress.org/support/topic/conflict-with-ajax-due-to-debug-warning).

Привязать вместо admin_menu крюк. Если у вас возникли проблемы с удалением страниц, связывайтесь с очень высоким приоритетом. Например. удалить theme-editor.php вам необходимо установить приоритет около 120. Для страниц Jetpack, вам нужно Somthing около 2000

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

Это также утверждается в Wordpress Codex.

Смежные вопросы