我在Wordpress 4.7.1上使用WooCommerce。以前,我运行4.7.0。当Wordpress自动升级到4.7.1时,我突然开始看到签出无法重定向到"谢谢"页面,用户界面显示发生了致命错误。
打开调试后发现以下错误:
PHP致命错误:无法重新声明get_cc()(之前在... / templates / emails / email-addresses.php:36中声明)在第36行的/ templates / emails / email-addresses.php < / p>
我还确认,永远不会使用require
,require_once
,include
或include_once
直接调用此文件。但是,使用wc_get_template()
调用它。
快速搜索让我this similar question。所以我将以下内容添加到email-addresses.php:
if (!function_exists('get_cc')) {
function get_cc( $code ) {
... function body
}
}
进行此更改后,我现在在调试日志中收到以下错误:
PHP致命错误:在第32行的/ templates / emails / email-addresses.php中调用未定义的函数get_cc()
这意味着,无论出于何种原因,PHP认为函数get_cc
已经存在,但同时它是未定义的。
我不是原始开发者。我从一个没有的承包商手中接管了这个项目。很明显,这个文件已经从原始文件中进行了大量修改。我确信函数返回的值必须保留,所以我不能只是注释掉这个调用。
根据上述信息,我有哪些方法可以解决或解决此问题?
答案 0 :(得分:2)
事实证明,与PHP中的标准函数定义不同,包含在if (!function_exists('function_name')) { ... }
块中的函数定义必须先于对该函数的任何调用。
在这种情况下,函数定义(第36行)跟随调用(第32行)。这导致函数在PHP中显示为未定义:
// Not working!
$value = get_cc($code);
if (!function_exists('get_cc')) {
function get_cc( $code ) {
...
}
}
切换订单以便首先功能定义修复了问题:
// Working!
if (!function_exists('get_cc')) {
function get_cc( $code ) {
...
}
}
$value = get_cc($code);
截至目前,PHP的文档没有提到这个问题。