首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WooCommerce ajax-支持插件-错误500 ajax-admin.php

WooCommerce ajax-支持插件-错误500 ajax-admin.php
EN

Stack Overflow用户
提问于 2018-04-02 12:51:37
回答 2查看 1.1K关注 0票数 0

我正在尝试构建一个简单的插件,将一个简单的AJAX按钮插入到WooCommerce产品页面中。按下按钮后,我想将当前的产品数据返回给我的Javascript代码,以便在前端处理。

这是在单击时执行的回调函数。

我得到错误:wp/admin-ajax.php 500 (内部服务器错误)

代码语言:javascript
运行
复制
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请求中正确处理了响应。如果我回一个硬编码的‘字符串’代替,它工作!

以前有人遇到过这种情况并找到了解决办法吗?

EN

回答 2

Stack Overflow用户

发布于 2018-04-07 07:05:07

您需要从ajax请求中传递产品id。然后,在php回调函数中,可以使用woocommerce函数从该id中获取产品对象。

/ /Get $product对象来自产品ID $product = wc_get_product( $product_id );

票数 0
EN

Stack Overflow用户

发布于 2018-04-07 08:19:54

您需要在插件中注册ajax端点,如下所示

代码语言:javascript
运行
复制
 add_action('wp_ajax_myFunction','myFunction');

然后,根据您的javascript,您可以执行以下操作

代码语言: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

代码语言:javascript
运行
复制
   $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();

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49611666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档