我正试图在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?