WooCommerce:电子邮件的模型只显示html,而不显示css

时间:2019-06-10 作者:Lucas Vendramini

我正在使用WooCommerce的3.4.7版本并配置电子邮件,我盯着一件奇怪的事情:模板没有出现在css中。我在我所有的网站上都有过这样的经历,这是一个安装了WordPress和WooCommerce的测试网站。

这是我的配置:

Image with my config

当前结果是:

current result of my template

我希望这样:

enter image description here

我不知道我做错了什么。谢谢你的帮助。

<小时>Edit: 我的电子邮件模板的HTML:https://pastebin.com/41TY84NS 注意:我没有使用我的主题的任何自定义模板,它是店面主题,我用2017进行了测试,并给出了相同的错误。

dom extension enabled

PHP 7.3.1版

1 个回复
最合适的回答,由SO网友:Lucas Vendramini 整理而成

我测试了很多WooCommerce版本(3.3.x、3.4.x和3.5.x),使用WP Rollback 我相信这是3.5.2版中修复的电子邮件模板中的一个错误。我在变更日志中找不到任何与此相关的内容:https://raw.githubusercontent.com/woocommerce/woocommerce/master/CHANGELOG.txt

以下是WooCommerce版本3.5.2中的模板:

template with css

我必须进行更深入的调查才能知道是什么,但3.5.2以下的版本会引发此错误:

[11-Jun-2019 13:46:09 UTC] PHP Warning:  preg_replace(): Compilation failed: invalid range in character class at offset 39 in C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\libraries\\class-emogrifier.php on line 1504
[11-Jun-2019 13:46:09 UTC] PHP Stack trace:
[11-Jun-2019 13:46:09 UTC] PHP   1. {main}() C:\\xampp\\htdocs\\market\\wp-admin\\index.php:0
[11-Jun-2019 13:46:09 UTC] PHP   2. require_once() C:\\xampp\\htdocs\\market\\wp-admin\\index.php:10
[11-Jun-2019 13:46:09 UTC] PHP   3. do_action() C:\\xampp\\htdocs\\market\\wp-admin\\admin.php:156
[11-Jun-2019 13:46:09 UTC] PHP   4. WP_Hook->do_action() C:\\xampp\\htdocs\\market\\wp-includes\\plugin.php:453
[11-Jun-2019 13:46:09 UTC] PHP   5. WP_Hook->apply_filters() C:\\xampp\\htdocs\\market\\wp-includes\\class-wp-hook.php:310
[11-Jun-2019 13:46:09 UTC] PHP   6. WC_Admin->preview_emails() C:\\xampp\\htdocs\\market\\wp-includes\\class-wp-hook.php:286
[11-Jun-2019 13:46:09 UTC] PHP   7. WC_Email->style_inline() C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\admin\\class-wc-admin.php:210
[11-Jun-2019 13:46:09 UTC] PHP   8. Emogrifier->emogrify() C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\emails\\class-wc-email.php:530
[11-Jun-2019 13:46:09 UTC] PHP   9. Emogrifier->createAndProcessXmlDocument() C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\libraries\\class-emogrifier.php:291
[11-Jun-2019 13:46:09 UTC] PHP  10. Emogrifier->process() C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\libraries\\class-emogrifier.php:327
[11-Jun-2019 13:46:09 UTC] PHP  11. Emogrifier->translateCssToXpath() C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\libraries\\class-emogrifier.php:369
[11-Jun-2019 13:46:09 UTC] PHP  12. Emogrifier->translateCssToXpathPass() C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\libraries\\class-emogrifier.php:1448
[11-Jun-2019 13:46:09 UTC] PHP  13. Emogrifier->translateCssToXpathPassWithMatchClassAttributesCallback() C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\libraries\\class-emogrifier.php:1472
[11-Jun-2019 13:46:09 UTC] PHP  14. preg_replace() C:\\xampp\\htdocs\\market\\wp-content\\plugins\\woocommerce\\includes\\libraries\\class-emogrifier.php:1504
感谢@SallyCJ的耐心和支持!

<小时>

Workaround:

我得到了3.5.2的课程,并在我的主题中使用了该课程。因此,您将能够修复WooCommerce 3.5.1及更低版本中的错误:

//3.4.7
add_filter( \'woocommerce_email_classes\', function($emails){

    require_once get_template_directory() . \'/class-emogrifier.php\';

    return $emails;
});


//3.5.1
add_filter( \'woocommerce_email_styles\', function($style){

    require_once get_template_directory() . \'/class-emogrifier.php\';

    return $style;
});

Class Emogrifier v2.0.0:

https://pastebin.com/U0eAFXpx

相关推荐

如何在页面重新加载后,用javasript隐藏条件隐藏的HTML表单域?

我有一个html表单,如果在下拉列表中选择了一个选项,我会有条件地用javascript隐藏一个字段。javascript条件工作正常,但当重新加载页面时,即使仍然选择了正确的选项,条件也会丢失。重新创建的步骤:我有一个js代码将用户输入存储在会话存储中,因为我的用户有时可能需要转到另一个页面,然后再返回表单。我有一个js代码,可以有条件地隐藏名为price_input_div 在选择字段中选择第三个选项时。问题:当我单击第三个选项时price_input_div 字段是隐藏的,但当重新加载页面时,即使第