如何在wordpress中制作自定义ajax处理程序

How to make custom ajax handler in wordpress?

本文关键字:自定义 ajax 处理 程序 wordpress      更新时间:2023-09-26

我正试图在wordpress中制作自定义ajax处理程序,因为admin-ajax.php处理从7秒到10秒的ajax请求需要很长时间,所以我在谷歌上搜索它,并设法做一些自定义的ajax-handler.php,比如这个

<?php
if (is_ajax_request()) {
    if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists
        $action = $_POST["action"];
        switch($action) { //Switch case for value of action
            case "test": test_function(); break;
        }
    }
}
//Function to check if the request is an AJAX request
function is_ajax_request() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}
function test_function()
{
    $response = wc_get_product(1463);
    header('Content-Type: application/json');
    echo json_encode($response);
    die();
}

我首先以文本$response = "test"的形式发送响应,ajax调用花费了300ms,但当试图从另一个文件(如$response = wc_get_product(1463);)调用函数时,它在响应Fatal error: Call to undefined function wc_get_product() in C:'wamp'www'....中抛出了一个错误我试着使用这个ajaxflow插件制作自定义wordpress-ajax-handel,但这是接缝的事情,所以请告诉我如何从另一个文件调用函数,非常感谢您的帮助。

您需要加载wp才能使用其功能

require_once 'wp-load.php' //note find the file relative to your files location or do a dynamic url to find .. e.g. `$_SERVER['DOCUMENT_ROOT']`
if (is_ajax_request()) {
    if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists
        $action = $_POST["action"];
        switch($action) { //Switch case for value of action
            case "test": test_function(); break;
        }
    }
}
//Function to check if the request is an AJAX request
function is_ajax_request() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}
function test_function()
{
    $response = wc_get_product(1463);
    header('Content-Type: application/json');
    echo json_encode($response);
    die();
}

但wp-ajax本身可能不是问题所在,你有没有用"test"这样的简单输出来测试wp-aajax?