【问题标题】:How to fix Call to undefined function get_woocommerce_currency() in wordpress?如何修复对 wordpress 中未定义函数 get_woocommerce_currency() 的调用?
【发布时间】:2018-05-29 03:21:44
【问题描述】:

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

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

如何解决它以及为什么会出现该错误?

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

谢谢。

【问题讨论】:

  • 未定义函数表示该函数不存在,进入您的 wp-includes/options.php 并通过 ctrl-F 搜索该函数并输入函数名称
  • 请查看这些钩子列表docs.woocommerce.com/wc-apidocs/…

标签: php wordpress woocommerce fatal-error


【解决方案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;
}

【讨论】:

  • 嗨@Reigel,即使你的代码在我使用它时成功了,但我的结帐部分仍然保持加载,它会覆盖其他 woocommerce 功能吗?
  • 你应该用你所做的更新你上面的原始帖子。因为我上面的代码不会做任何事情,无论你放什么都是另一个故事。所以我不知道是什么问题。
  • 将函数挂钩到woocommerce_init 只会确保 WooCommerce 准备就绪。所以 WooCommerce 的所有功能都会存在。
  • 我已经添加了我的完整代码。我想要做的是仅当货币为美元时才激活此运输方式。除了检查货币还有其他方法吗?
  • 我没有彻底检查你的代码,因为它很长。但是add_chalitha_shipping_method 增加了送货方式。你应该把if放在那里。
【解决方案2】:

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

【讨论】:

  • require_once '/woocommerce/includes/wc-core-functions.php';这是正确的路径吗?
  • 添加为 require_once '../woocommerce/includes/wc-core-functions.php';
  • 我已经添加了完整的代码,到目前为止没有货币检查部分,
猜你喜欢
  • 2013-04-29
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2017-07-10
  • 2020-01-08
  • 1970-01-01
相关资源
最近更新 更多