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

时间:2016-01-04 17:15:49

标签: javascript php jquery ajax wordpress

我正在尝试在wordpress中制作自定义ajax处理程序,因为admin-ajax.php需要花费很长时间才能处理从7s到10s的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调用花费300毫秒但是当尝试从另一个文件调用函数时$response = wc_get_product(1463);它会在响应Fatal error: Call to undefined function wc_get_product() in C:\wamp\www\....中引发错误 我试图使用这个ajaxflow plugin制作自定义wordpress ajax handel,但它接缝的东西请所以我如何从其他文件中调用这些函数,并提前感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您需要加载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本身可能不是问题,你是否用简单的输出来测试wp-ajax,例如&#39; test&#39; ?