【问题标题】:Is it possible to edit message body of all sent emails in wordpress是否可以在 wordpress 中编辑所有已发送电子邮件的消息正文
【发布时间】:2026-02-04 07:45:02
【问题描述】:

我正在测试是否可以编辑从 wordpress 发送的所有电子邮件的 html 代码。这是我到现在为止的想法:

     add_filter('wp_mail_content_type', function( $content_type ) {
                    return 'text/html';
        });

    add_filter('wp_mail', 'my_wp_mail');

    function my_wp_mail($atts) {
    $atts['message'] .= '  <br/><div id="result">my text line here</div>';
    return $atts;
    } 

上面的代码将在底部添加“我的文本行”这一行,我正在寻找一种能够使用 JavaScript 将 div 替换为另一个页面的内容的方法:

    <script>
            jQuery(document).ready(function(){
                jQuery('#result').load('https://develop2020.000webhostapp.com/divdiv.html .myclass');
            });

    </script> 

然后是要发送的电子邮件。是否可以使用 JavaScript 执行此操作,还是必须使用 PHP?如果可能的话,如何从 url 中提取 div 并将其添加到所有电子邮件中?

【问题讨论】:

    标签: javascript php html wordpress


    【解决方案1】:

    欢迎来到 Stack Overflow!

    首先,在电子邮件中使用 JS 是不可能的。

    使用 Javascript 发送或确定电子邮件的内容似乎很麻烦,因为 Wordpress 通过 PHP 发送电子邮件。 Javascript 在浏览器中运行(当涉及到 Wordpress 时)而不是在服务器上,因此如果您尝试使用 JS 来发送电子邮件,则必须以某种方式在浏览器中打开一个页面。如果在服务器上做了一些事情,比如发送电子邮件,你想使用 PHP。

    至于解决方案,使用 curl (https://www.php.net/manual/en/curl.examples-basic.php) 或 file_get_contents (https://www.php.net/manual/en/function.file-get-contents.php) 将页面放入 .load() 更有意义,然后使用 e-使用您用于将内容添加到电子邮件底部的过滤器发送邮件。

    如果您只想使用通过 curl/file_get_contents 检索到的页面的一部分,您可以使用 PHP 中的 DOMdocument 选择该部分:

    https://www.tutorialspoint.com/php/php_dom_parser_example.htm https://www.php.net/manual/en/class.domdocument.php

    【讨论】:

    • 谢谢,我找到了上面的解决方案......但尝试将此解决方案应用于具有使用 ajax 加载的 div 的页面......它不起作用
    • 你是对的,如果页面有一个由 Ajax 加载的 div 并且你想放入电子邮件中,事情变得更加困难。您应该检查页面中的 ajax 调用返回的数据类型。如果它是 HTML 而不是 JSON,您可以尝试使用 php 方法自己进行 Ajax 调用,然后填补空白。如果是 JSON,你可以选择用 php 获取数据,然后自己解析。要在该页面中找到 Ajax 调用,我在 chrome 中打开开发人员工具 (ctrl+shift+i) 并转到网络选项卡并检查类型为 xhr 的数据包。
    • 谢谢 ....我不熟悉 ajax,但检查了 xhr,发现响应是 html 并包含我想要的 div 如何从该 ajax 调用中捕获 div ..跨度>
    • 如果您单击 xhr 请求并转到其Headers 选项卡,您会在顶部看到请求 URL,这是 Ajax 调用获取其 div 的 URL。但它也可能会发送 post/get 数据来获取它,如果您滚动到名为 Query String Parameters 的 Headers 选项卡底部,您可以看到它。您可以使用它来获取 div。
    • 只需使用任何获取 URL 的 PHP 函数(例如 curl / file_get_contents(也可能是 DOMDocument-&gt;loadHTMLFile)检索 URL(可能带有 get/post vars)。
    【解决方案2】:

    我发现这种方法很有效

    add_filter('wp_mail_content_type', function( $content_type ) {
                    return 'text/html';
        });
    
    add_filter('wp_mail', 'my_wp_mail');
    
    function my_wp_mail($atts) {
    
    $url = 'https://develop2020.000webhostapp.com/divdiv.html';
    $dom = new DOMDocument();
    @$dom->loadHTMLFile($url);
    $xpath = new DOMXpath($dom);
    $elements = $xpath->query('//div[@class="myclass"]');
    $link = $dom->saveHTML($elements->item(0));
    
    
    $atts['message'] .= $link;
    return $atts;
    }
    

    它有效,但现在我想从 div 中捕获 div 的页面问题是使用 ajax 加载的 ..所以不确定是否有解决方案

    【讨论】: