我目前正在尝试使用html内容内联css,该内容可以完美运行,但只能运行一次。多次尝试时,出现此错误:
PHP致命错误:无法声明类Emogrifier,因为名称是 已经在使用
在我的Wordpress子主题functions.php文件中包含了email-functions.php中引发的错误:
/**
* Include email functions for ultimate member
*/
require 'ultimate-member/functions/email-functions.php';
这是导致问题的电子邮件功能.php文件中的函数:
/**
* Apply css to UM email message from template
*/
add_filter( 'um_email_send_message_content', 'apply_style_to_email', 10, 99);
function apply_style_to_email($message, $slug, $args ) {
//Get Emogrifier class
include_once get_home_path() . 'wp-content/themes/DiviChild/ultimate-member/libraries/class-emogrifier.php';
ob_start();
include_once get_home_path() . 'wp-content/themes/DiviChild/woocommerce/emails/email-styles.php';
$css = apply_filters( 'woocommerce_email_styles', ob_get_clean() );
// apply CSS styles inline for picky email clients.
try {
$emogrifier = new Emogrifier( $message, $css );
$message = $emogrifier->emogrify();
} catch ( Exception $e ) {
$logger = wc_get_logger();
$logger->error( $e->getMessage(), array( 'source' => 'emogrifier' ) );
}
return $message;
}
如您所见,我正在使用include_once来获取Emogrifier类。我真的不知道我在做什么错。
这是Emogrifier类别:https://codeshare.io/50B0ml
答案 0 :(得分:2)
该错误很好地描述了您的问题。您的项目中似乎有2个同名类。在这里,命名空间可以为您提供帮助。
最好在项目文件中搜索关键字“ emogrifier”,也许您在该项目中有2次上课的经历。或者,该类通过Composer来自供应商目录之一,但对于Composer软件包命名空间,则不应发生这种情况。
答案 1 :(得分:-2)
您可能需要使用require_once()
,它完全按照其说明进行操作。
如果您require()
已经require
d的文件,则PHP不在乎:它将再次读取源文件,从而导致此错误。而require_once()
仅在以前从未读取过源文件的情况下才会读取。