Use CssInliner class instead of Emogrifier class
With the upgrade of the Emogrifier package we can't use the Emogrifier class, since it was removed in v4 (we need to use at least v5 for compatibility with PHP 8); so we now use the CssInliner class. Note that this is a potential breaking change for consumers of the woocommerce_emogrifier hook, which was getting an Emogrifier object as parameter (now it gets a CssInliner object, which is partially compatible).
This commit is contained in:
parent
0f2b717462
commit
fbc77160db
|
@ -5,6 +5,10 @@
|
|||
* @package WooCommerce\Emails
|
||||
*/
|
||||
|
||||
use Pelago\Emogrifier\CssInliner;
|
||||
use Pelago\Emogrifier\HtmlProcessor\CssToAttributeConverter;
|
||||
use Pelago\Emogrifier\HtmlProcessor\HtmlPruner;
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
}
|
||||
|
@ -559,18 +563,20 @@ class WC_Email extends WC_Settings_API {
|
|||
wc_get_template( 'emails/email-styles.php' );
|
||||
$css = apply_filters( 'woocommerce_email_styles', ob_get_clean(), $this );
|
||||
|
||||
$emogrifier_class = 'Pelago\\Emogrifier';
|
||||
$css_inliner_class = CssInliner::class;
|
||||
|
||||
if ( $this->supports_emogrifier() && class_exists( $emogrifier_class ) ) {
|
||||
if ( $this->supports_emogrifier() && class_exists( $css_inliner_class ) ) {
|
||||
try {
|
||||
$emogrifier = new $emogrifier_class( $content, $css );
|
||||
$css_inliner = CssInliner::fromHtml( $content )->inlineCss( $css );
|
||||
|
||||
do_action( 'woocommerce_emogrifier', $emogrifier, $this );
|
||||
do_action( 'woocommerce_emogrifier', $css_inliner, $this );
|
||||
|
||||
$content = $emogrifier->emogrify();
|
||||
$html_prune = \Pelago\Emogrifier\HtmlProcessor\HtmlPruner::fromHtml( $content );
|
||||
$html_prune->removeElementsWithDisplayNone();
|
||||
$content = $html_prune->render();
|
||||
$domDocument = $css_inliner->getDomDocument();
|
||||
|
||||
HtmlPruner::fromDomDocument( $domDocument )->removeElementsWithDisplayNone();
|
||||
$content = CssToAttributeConverter::fromDomDocument( $domDocument )
|
||||
->convertCssToVisualAttributes()
|
||||
->render();
|
||||
} catch ( Exception $e ) {
|
||||
$logger = wc_get_logger();
|
||||
$logger->error( $e->getMessage(), array( 'source' => 'emogrifier' ) );
|
||||
|
|
Loading…
Reference in New Issue