WooCommerce AJAX驱动的插件 - 错误500 ajax-admin.php

时间:2018-04-02 12:51:37

标签: php jquery ajax wordpress woocommerce

我正在尝试构建一个简单的插件,将简单的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请求中正确处理了响应。如果我回复一个硬编码的字符串'相反,它有效!

之前有人遇到过此问题并找到了修复方法吗?

2 个答案:

答案 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();

希望这有帮助!