Wordpress wp admin ajax - 有时可行,有时却不行

时间:2014-02-18 15:07:46

标签: javascript php jquery ajax wordpress

我正在尝试使用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似乎是被解雇的,但是没有响应,所以没有验证。任何人都知道为什么?

2 个答案:

答案 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' );

它神奇地开始工作。