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

时间:2018-05-29 03:21:44

标签: php wordpress woocommerce fatal-error

我正在为我的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');

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

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

您的问题的解决方案取决于您如何/何时调用您拥有的代码行。

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

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

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

如果您正在制作一个与WooCommerce一起使用的插件,我建议您在woocommerce_init的函数挂钩中运行插件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;
}

答案 1 :(得分:0)

在调用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目录中找到它。