如何在 wordpress 中修复对未定义函数 get_woocommerce_currency() 的调用?

How to fix Call to undefined function get_woocommerce_currency() in wordpress?

我正在为我的 WooCommerce 网站开发自定义运输插件。

当且仅当用户的货币为美元时,我想将送货方式更改为我的自定义方式。除了美元,我还使用 LKR 作为我的其他货币单位。如果货币为 LKR,则应采用不同的运输方式。

所以我试图通过在我的 plugin.php 文件中使用此代码来检查用户当前的基础货币是否为美元,

我的 plugin.php 代码包含在 -> wp-content/plugins/my-plugin

 if ( 'USD' !== get_woocommerce_currency() ) {
    echo 'Hello  ';
    //my action
}   

所以现在每次我 运行 这段代码都会收到一个致命错误

Call to undefined function get_woocommerce_currency()

然后我尝试包括 option.php ,

include_once('wp-includes/option.php');

仍然收到相同的错误消息。

如何修复它以及为什么我会收到该错误?

我想做的只是检查用户当前的货币,如果货币只有美元,则激活插件。

谢谢。

您的问题的修复将取决于how/when您调用的那些代码行。

一个是如果你在 woocommerce_init 上添加了一个钩子,这将不是问题。

一个非常非常简单的例子来说明我的意思。

add_action( 'woocommerce_init', 'wc_init' );
function wc_init(){
    // get_woocommerce_currency() will not throw error here.
}

如果你正在制作一个应该与 WooCommerce 一起工作的插件,我建议你 运行 你的插件在函数挂钩中初始化到 woocommerce_init


我不太确定你在做什么。但如果你只是对货币感兴趣,不妨这样做:

$currency = apply_filters( 'woocommerce_currency', get_option( 'woocommerce_currency' ) );
if ( 'USD' !== $currency ) {
    echo 'Hello  ';
    //my action
}

同样,与 WooCommerce 一起工作时,您应该使用 'woocommerce_init' 挂钩您的函数。


更新 3

function add_chalitha_shipping_method( $methods ) {
    if ( 'USD' == get_woocommerce_currency() ) {
         $methods[] = 'test_Shipping_Method';
    }
    return $methods;
}

在调用get_woocommerce_currency()函数之前你应该检查函数是否存在。 get_woocommerce_currency() 存在于 wc-core-functions.php 文件中。

if ( !function_exists( 'get_woocommerce_currency' ) ) { 
  require_once '/includes/wc-core-functions.php'; 
} 


$currency_code = get_woocommerce_currency();

if ( 'USD' !== $currency_code  ) {
      echo 'Hello  ';
     //my action
}    

get_woocommerce_currency() 是 WooCommerce 的功能。您会在 wp-content\plugins\woocommerce\includes 目录中找到它。