我正在尝试构建一个简单的插件,将简单的AJAX驱动按钮插入到WooCommerce产品页面中。按下按钮后,我想将当前产品数据返回到我的Javascript代码,以便在前端处理。
这是单击时执行的回调函数。
我收到错误: wp-admin / admin-ajax.php 500(内部服务器错误)
function myfunction() {
//gets executed;
global $product;
$name = $product->get_name();
echo $name;
wp_die();
}
在debug.log中,很明显全局$ product变量不可用:PHP致命错误:未捕获错误:在null上调用成员函数get_name()。
备注:
global $product; $product->get_name()
适用于其他php函数
没有通过AJAX调用。myfunction()
已成功调用,并且在JQuery请求中正确处理了响应。如果我回复一个硬编码的字符串'相反,它有效!之前有人遇到过此问题并找到了修复方法吗?
答案 0 :(得分:0)
您需要从ajax请求传递产品ID。然后在你的php回调函数中,你可以使用woocommerce函数从该id获取产品对象。
/ /从产品ID中获取$ product对象 $ product = wc_get_product($ product_id);
答案 1 :(得分:0)
您需要在插件中注册ajax端点,如下所示
add_action('wp_ajax_myFunction','myFunction');
然后从您的javascript中可以执行以下操作
var postData = {
'product-id': productId,
'action':'myFunction'
};
$.ajax({
'type':'POST',
'url': ajaxurl,
'dataType':'json',
'cache':false,
'data':postData,
success: function(response)
{
//more stuffs do ot
},
error: function(xhr, textStatus, errorThrown)
{
// handle error
}
}
然后在后端函数myFunction
$postItems = filter_input_array(INPUT_POST, ['product-id' => 'string']);
//$postItems will contain product-id which you can use to do more things
// this gives $product object with public method like get_title
$product = wc_get_product( $product_id );
$name = $product->get_title();
wp_send_json_success( array('name'=>$name), 200);
exit();
希望这有帮助!