首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从woocommerce_order_details_after_order_table钩子访问order对象

从woocommerce_order_details_after_order_table钩子访问order对象
EN

Stack Overflow用户
提问于 2019-09-19 00:17:08
回答 2查看 1.8K关注 0票数 0

在WooCommerce中,我正在制作一个定制的商人插件,并添加了这个钩子:

代码语言:javascript
复制
add_action( 'woocommerce_order_details_after_order_table', 'track_me' );

track_me()函数中,我希望检索order来做一些事情。

当我想要的时候,这个函数可以做我想做的事情,但是我现在从URL中得到了order_id,这看起来很简陋。

我不知道如何正确检索$order对象或$order_id,这就足够了。

这几乎可以肯定是显而易见的,因为几个小时的互联网搜索都是徒劳的。我只是不知道什么是明显的东西..。

更新1:按照@LoicTheAztec的建议,我做了以下工作:

代码语言:javascript
复制
do_action( 'woocommerce_order_details_after_order_table_items', $order );

class Order_MY extends WC_Order
{
    function __construct() 
    {
        add_action( 'woocommerce_order_details_after_order_table', array( $this, 'track_me' ) );
    }

    function track_me( $order ) 
    { 
        // My code here
    }
}

脚本失败的第一个地方是在do_action行上,其中$order是一个未定义的变量。

该脚本在扩展WC_Order:类'WC_Order‘未找到时也失败

新问题。我需要做些什么来确保我可以访问我插件中的woocommerce类吗?

EN

回答 2

Stack Overflow用户

发布于 2019-09-19 08:43:47

钩子中包含WC_Order对象实例WC_Order变量。

您可以在order/order-details.php template file上看到这一点(第76行)

代码语言:javascript
复制
do_action( 'woocommerce_order_details_after_order_table_items', $order );

因此,您可以在您的钩子函数中这样使用它:

代码语言:javascript
复制
add_action( 'woocommerce_order_details_after_order_table', 'track_me' );

function track_me( $order ) {

     // The Order ID
     $order_id = $order->get_id();

     // your code goes below
}

现在,在一个插件中的一个类中,您将替换:

代码语言:javascript
复制
add_action( 'woocommerce_order_details_after_order_table', 'track_me' );

出自:

代码语言:javascript
复制
add_action( 'woocommerce_order_details_after_order_table', array( $this, 'track_me' ) );

加法:

由于无法从插件中获取$order对象,您还应该尝试:

代码语言:javascript
复制
add_action( 'woocommerce_order_details_after_order_table', 'track_me' );

function track_me( $order ) {

     if ( ! is_a( $order, 'WC_Order' ) ) {
         global $order;
     }

     // The Order ID
     $order_id = $order->get_id();

     // your code goes below
}

我不能再告诉你任何事了

票数 0
EN

Stack Overflow用户

发布于 2019-09-19 04:44:49

我不是专家,但也许是某事物。就像这样:

代码语言:javascript
复制
global $order_id;
$order = wc_get_order($order_id);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58002160

复制
相关文章

相似问题

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