首页 > 解决方案 > Wordpress admin-ajax.php 加载失败

问题描述

我正在为我的实践开发一个 wordpress 插件,并在其中通过获取一些信息来注册客户。

在此处输入图像描述

is_user_logged_in() 返回 false 然后我想加入脚本

function theme_enqueue_scripts() {
    if ( ! is_user_logged_in()){
        wp_enqueue_script( 'frontend-ajax', admin_url( 'admin-ajax.php' ));
        wp_localize_script( 'frontend-ajax', 'frontend_ajax_object',admin_url( 'admin-ajax.php' ));
    }
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue_scripts' );
add_action( 'wp_ajax_PHPSidefunction', 'PHPSidefunction' );
add_action( 'wp_ajax_nopriv_PHPSidefunctionNopriv', 'PHPSidefunctionNopriv' );

以及来自下面的 ajax 调用代码的操作

$('#submitbutton').click(function() {

var $inputemail=document.getElementById('inputemail').value;
var $inputname=document.getElementById('inputname').value;
var $inputlastname=document.getElementById('inputlastname').value;
var $inputpassword=document.getElementById('inputpassword').value;
console.log($inputemail+$inputname+$inputlastname+$inputpassword);
console.log("<?php echo get_home_url(); ?>/wp-admin/admin-ajax.php");
$.ajax({
    url:frontend_ajax_object, 
    type: "POST",
    dataType: "Text",
    data: {
        action: "PHPSidefunctionNopriv",
        inputemail: $inputemail,
        inputname:$inputname,
        inputlastname:$inputlastname,
        inputpassword:$inputpassword
    },
    success: function (response) {
        console.log(response);
    }
    error: function(errortype,textStatus,errorThrown){
        console.log(errortype);
        console.log(textStatus);
        console.log(errorThrown);
    }
});
});

回调函数在这里

function PHPSidefunctionNopriv(){
//echo 'i am phpside function nopriv';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if($_POST['action'] == 'PHPSidefunction'){
        $email= $_POST['inputemail'];
        $password=$_POST['inputpassword'];
        $userid=wc_create_new_customer($email,$email,$password);
        echo $userid;
        wp_die();
    }
}
}

但我在排队脚本时遇到错误

在此处输入图像描述

等待帮助,在此先感谢。

标签: javascriptphpwordpresswoocommerce

解决方案


您正在尝试将 PHP 脚本加载为 javascript 文件。这是完全错误的。

function theme_enqueue_scripts() {
    wp_localize_script( 'frontend-ajax', 'frontend_ajax_object',admin_url( 'admin-ajax.php' ));
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue_scripts' );
add_action( 'wp_ajax_PHPSidefunction', 'PHPSidefunction' );
add_action( 'wp_ajax_nopriv_PHPSidefunctionNopriv', 'PHPSidefunctionNopriv' );

用户登录与否,都无所谓。Ajax url 将始终admin_url('admin-ajax.php')用于 WP_AJAX。


推荐阅读