我正在尝试使用Wordpress和jQuery Validate插件进行一些表单验证。我的js代码是:
<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 "
}
});
}
});
我是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' );
这只适用于SOMETIMES,有时则不然。 AJAX似乎是被解雇的,但是没有响应,所以没有验证。任何人都知道为什么?
答案 0 :(得分:1)
您应该避免使用admin_init
挂钩删除 menu_pages 和 submenu_pages ,因为它可能会与AJAX产生冲突(请参阅https://wordpress.org/support/topic/conflict-with-ajax-due-to-debug-warning)。< / p>
绑定到admin_menu
挂钩。如果您在删除部分页面时遇到问题,请以非常高的优先级进行绑定。例如。删除theme-editor.php
你需要设置大约120的优先级。对于Jetpack页面,你需要2000左右的东西。
add_action( 'admin_menu', 'moto_remove_menu_pages', 2000 );
这也在Wordpress Codex中说明。
答案 1 :(得分: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' );
它神奇地开始工作。