【问题标题】:PHP Fatal error: Cannot declare class Emogrifier, because the name is already in usePHP 致命错误:无法声明类 Emogrifier,因为名称已在使用中
【发布时间】:2019-04-15 05:58:36
【问题描述】:

我目前正在尝试使用 html 内容内联 css,该内容完美但只有一次。当我多次尝试时,我收到此错误:

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

在我的 Wordpress 子主题 functions.php 文件中包含的 email-functions.php 中引发了错误:

/**
 * Include email functions for ultimate member
 */
require 'ultimate-member/functions/email-functions.php';

这是导致问题的 email-functions.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

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    该错误很好地描述了您的问题。看起来您的项目中有 2 个同名的类。这里有一个 NameSpace 可以帮助您。

    最好在你的项目文件中搜索关键字“emogrifier”,也许你在项目中有 2 次类。或者该类通过 Composer 来自供应商目录之一,但 Composer Packages NameSpaces 不应该发生这种情况。

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

    【讨论】:

      【解决方案2】:
      $vendorDir = dirname(__DIR__);
      require_once( $vendorDir . '/wooemailcut304/includes/emogrifier/Emogrifier.php' );
      

      【讨论】:

      • 请用更多的信息和解释扩展你的答案,所以它不仅仅是一个无法解释的代码块。
      【解决方案3】:

      您可能需要使用require_once(),它的功能与它所说的完全一样。

      如果你require() 一个已经是required 的文件,PHP 不在乎:它会再次读取源文件,导致这个错误。而require_once() 将仅在之前未读取过源文件时读取它。

      【讨论】:

      • 将 include_one 替换为 require_one 但问题仍然存在:[12-Nov-2018 14:34:49 UTC] PHP 致命错误:无法声明类 Emogrifier,因为该名称已在使用中跨度>
      猜你喜欢
      • 2023-03-10
      • 2019-12-25
      • 2016-11-03
      • 2020-03-20
      • 2020-10-10
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2019-08-23
      相关资源
      最近更新 更多