我正在尝试构建一个简单的插件,将一个简单的AJAX按钮插入到WooCommerce产品页面中。按下按钮后,我想将当前的产品数据返回给我的Javascript代码,以便在前端处理。
这是在单击时执行的回调函数。
我得到错误:wp/admin-ajax.php 500 (内部服务器错误)
function myfunction() {
     //gets executed;
    global $product;
    $name = $product->get_name();
    echo $name;
  wp_die();
 }在debug.log中,很明显全局$product变量不可用:PHP致命错误: Uncaught $product:调用null上的成员函数get_name()。
备注:
global $product; $product->get_name()工作在其他未通过AJAX调用的php函数中。myfunction(),并在JQuery请求中正确处理了响应。如果我回一个硬编码的‘字符串’代替,它工作!以前有人遇到过这种情况并找到了解决办法吗?
发布于 2018-04-07 07:05:07
您需要从ajax请求中传递产品id。然后,在php回调函数中,可以使用woocommerce函数从该id中获取产品对象。
/ /Get $product对象来自产品ID $product = wc_get_product( $product_id );
发布于 2018-04-07 08:19:54
您需要在插件中注册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();希望这能有所帮助!
https://stackoverflow.com/questions/49611666
复制相似问题