在WooCommerce中,我正在制作一个定制的商人插件,并添加了这个钩子:
add_action( 'woocommerce_order_details_after_order_table', 'track_me' );在track_me()函数中,我希望检索order来做一些事情。
当我想要的时候,这个函数可以做我想做的事情,但是我现在从URL中得到了order_id,这看起来很简陋。
我不知道如何正确检索$order对象或$order_id,这就足够了。
这几乎可以肯定是显而易见的,因为几个小时的互联网搜索都是徒劳的。我只是不知道什么是明显的东西..。
更新1:按照@LoicTheAztec的建议,我做了以下工作:
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类吗?
发布于 2019-09-19 08:43:47
钩子中包含WC_Order对象实例WC_Order变量。
您可以在order/order-details.php template file上看到这一点(第76行)
do_action( 'woocommerce_order_details_after_order_table_items', $order );因此,您可以在您的钩子函数中这样使用它:
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
}现在,在一个插件中的一个类中,您将替换:
add_action( 'woocommerce_order_details_after_order_table', 'track_me' );出自:
add_action( 'woocommerce_order_details_after_order_table', array( $this, 'track_me' ) );加法:
由于无法从插件中获取$order对象,您还应该尝试:
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
}我不能再告诉你任何事了
发布于 2019-09-19 04:44:49
我不是专家,但也许是某事物。就像这样:
global $order_id;
$order = wc_get_order($order_id);https://stackoverflow.com/questions/58002160
复制相似问题