PHP致命错误:无法声明类Emogrifier,因为该名称已被使用

时间:2018-11-12 13:40:51

标签: php wordpress woocommerce

我目前正在尝试使用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

2 个答案:

答案 0 :(得分:2)

该错误很好地描述了您的问题。您的项目中似乎有2个同名类。在这里,命名空间可以为您提供帮助。

最好在项目文件中搜索关键字“ emogrifier”,也许您在该项目中有2次上课的经历。或者,该类通过Composer来自供应商目录之一,但对于Composer软件包命名空间,则不应发生这种情况。

http://php.net/manual/de/language.namespaces.php

答案 1 :(得分:-2)

您可能需要使用require_once(),它完全按照其说明进行操作。

如果您require()已经require d的文件,则PHP不在乎:它将再次读取源文件,从而导致此错误。而require_once()仅在以前从未读取过源文件的情况下才会读取。