繁体   English   中英

Wordpress WP Administrator Ajax-有时有效,有时不起作用

[英]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_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中也有说明。

问题似乎在于删除非管理员用户的页面。 当我将其更改为:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM