[英]Wordpress wp admin ajax - sometimes works, sometimes doesn't
我正在尝试使用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' );
这仅在某些时间有效,有时则无效。 AJAX实际上已被触发,但是没有响应,因此也没有验证。 有人知道为什么吗?
您应该避免使用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页面,您需要大约2000的优先级。
add_action( 'admin_menu', 'moto_remove_menu_pages', 2000 );
这在Wordpress Codex中也有说明。
问题似乎在于删除非管理员用户的页面。 当我将其更改为:
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' );
它神奇地开始工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.