Неустранимая ошибка PHP: невозможно объявить класс Emogrifier, так как имя уже используется - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время я пытаюсь встроить CSS с HTML-контентом, который работает идеально, но только один раз.Когда я пробую это несколько раз, я получаю эту ошибку:

Неустранимая ошибка PHP: Невозможно объявить класс Emogrifier, поскольку имя уже используется

Ошибкаброшенный в email-functions.php, который включается в мой файл Word.px для 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

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Ошибка описывает вашу проблему довольно хорошо. Похоже, в вашем проекте есть 2 класса с одинаковыми именами. Здесь NameSpace может помочь вам.

Лучше всего искать в файлах вашего проекта ключевое слово "emogrifier", возможно, у вас есть класс 2 раза в проекте. Или класс поступает из одного из каталогов вендора через Composer, но этого не должно происходить с пространствами имен пакетов Composer.

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

0 голосов
/ 12 ноября 2018

Вам, вероятно, нужно использовать require_once(), который делает именно то, что говорит.

Если вы require() файл, который уже был require d, PHP не заботится: он снова читает исходный файл, что приводит к этой ошибке. Принимая во внимание, что require_once() будет читать исходный файл, только если он еще не был прочитан ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...