【发布时间】:2017-07-19 21:10:37
【问题描述】:
有谁知道是否可以在第三方插件中使用旧版本的 WooCommerce 添加 get_id() 方法,以便与 Google 标签管理器插件一起使用?
我现在不想更新插件,因为它会弄乱网站。
有人知道这是否可能吗?
谢谢
【问题讨论】:
标签: php wordpress methods plugins woocommerce
有谁知道是否可以在第三方插件中使用旧版本的 WooCommerce 添加 get_id() 方法,以便与 Google 标签管理器插件一起使用?
我现在不想更新插件,因为它会弄乱网站。
有人知道这是否可能吗?
谢谢
【问题讨论】:
标签: php wordpress methods plugins woocommerce
是的,您可以在任何 WooCommerce 对象上使用 PHP 函数 method_exists(),例如 WC_Product 或 WC_Order 对象...
这是一个带有WC_Product对象的示例$product:
// WooCommerce retro-compatibility (compact)
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $order->id;
或者你也可以使用 version_compare() PHP 函数:
// WooCommerce retro-compatibility (2)
if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
// Older than 3.0
$product_id = $product->id;
} else {
// 3.0 and above
$product_id = $product->get_id();
}
同样以紧凑的方式:
$product_id = version_compare( WC_VERSION, '3.0', '<' ) ? $product->id : $product->get_id();
($product 是一个现有且已定义的 WC_Product 对象……)
【讨论】:
$product_id = method_exists( $order, 'get_id' ); 而不是这个? $product_id = $product->get_id(); 产品已定义?
$product 而不是$order 更新了我的答案……是的,$product 是一个已定义且现有的 WC_Product 对象(就像在旧版本的 WooCommerce 中一样) ...这个答案允许为您的代码提供版本兼容性。所以你的代码也适用于 WC 2.6.x 和 WC 3+
get_id(); 的函数添加到 Woocommerce 插件以便其他插件可以访问它的最佳方法是什么。例如,我有一个使用get_id(); 函数集成的插件,但我想避免编辑插件以防将来要更新它?
你可以像这样使用旧版本的代码兼容性
global $woocommerce;
// if old version of WooCommerce
$product_object = version_compare( $woocommerce->version, '3.0', '<' ) ?
$order_data->get_product_from_item( $item ) : $item->get_product();
【讨论】: