在WordPress多站点用户前端页面中发布"admin-ajax.php" 400



我正在尝试从WordPress Multisite中的插件在用户前端页面中使用AJAX,但是admin-ajax.php生成错误请求400并且总是失败。

  1. 开发WordPress插件 - 管理页面中的AJAX运行良好
  2. WordPress Multisite
  3. Site_1测试

这是我的代码和输出的一部分,我只是缩短了它,有一个类来实例化 AJAX 操作,另一个类在它之后使用wp_enqueue_scripts操作包含 JS 文件..

无论如何,JS文件正确包含和控制台.log函数显示所有JS数据对象,如下面的代码所示,但它总是失败并且msg参数在statusText中打印错误请求..我错过了什么??

/* == AJAX Class == */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' ) );

/* 1. The JS file included correctly */
wp_register_script( 'wpmu/scripts/frontend/core', 'JS_FILE.js', 
    array( 'jquery' ), '1.0', true );
/* 2. Localize */
wp_localize_script( 'wpmu/scripts/frontend/core', 'wpmu_ajax', array (
    'ajax_url'  => esc_url( admin_url('admin-ajax.php') )
  )
);
/* 3. Enqueue */
wp_enqueue_script( 'wpmu/scripts/frontend/core' );

== JS FILE ==
(function ($) {
'use strict';
$.wpmu = $.wpmu || {};
$.wpmu.ajax_vars = {
    ajax_url: wpmu_ajax.ajax_url,
};
$(document).ready(function () {
    /* 1. DEBUG */
    console.log($.wpmu.ajax_vars);
    /* 2. DEBUG - OUTPUT */
    -- ajax_vars:
    --    ajax_url: "http://localwp.com:90/wpmu/SITE_1/wp-admin/admin-ajax.php"
    /* ========= Main Code ======== */
    $(document.body).on('click', '#my-wrapper .submit', function (e) {
        e.preventDefault();
        var server_data = {
            action: 'wpmu_frontendpage',
        };
        $.ajax({
            method: 'POST',
            async: true,
            url: $.wpmu.ajax_vars.ajax_url,
            data: server_data,
        }).done(function (response) {
            alert('success');
        }).fail(function (msg) {
            console.log( msg );
        });
        return false;
    });
});
})(jQuery);

为了帮助其他人,我找到了解决方案,那是因为我做了一个 IF 条件检查,如果不是管理页面并且 {wp_ajax_} 操作必须全局触发,我认为最好仅在前端用户页面中需要时实例化 AJAX 类。

--

旧代码 -- 错误

if( ! is_admin() ) {
   /* Instantiate the AJAX class */
   add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
   add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' ) );
}

--修复

/* Instantiate the AJAX class without NON-Admin pages condition */
add_action( 'wp_ajax_wpmu_frontendpage', array( &$this, '_class_function' ) );
add_action( 'wp_ajax_nopriv_wpmu_frontendpage', array( &$this, '_class_function' )

最新更新