没有页眉和页脚的WooCommerce自定义电子邮件

时间:2013-02-23 作者:Tomas

我正在开发Wordpress/WooCommerce扩展插件,以便在主站点(不是wp admin)上启用密码重置。我想使用标准WooCommerce邮件程序和电子邮件模板发送带有激活链接的密码重置请求电子邮件

电子邮件由函数触发

function send_activation_link() {
  global $woocommerce;

  if ( \'POST\' !== strtoupper( $_SERVER[ \'REQUEST_METHOD\' ] ) )
    return;

  if ( empty( $_POST[ \'action\' ] ) || ( \'lost-password\' !== $_POST[ \'action\' ] ) )
     return;

  //My other code here....

  ob_start();

  // Get mail template
  woocommerce_get_template(\'emails/customer-reset-password-link.php\', array(
    \'user_login\'    => $user_login,
    \'blogname\'      => $blogname,
    \'email_heading\' => $email_heading,
    \'key\'           => $key
  ));

  // Get contents
  $message = ob_get_clean();

  $mailer = $woocommerce->mailer();
  $mailer->send( $user_email, $subject, $message);
}
add_action( \'init\', \'send_activation_link\');
模板emails/customer-reset-password-link.php:

<?php
/**
 * Password reset email
*/
if (!defined(\'ABSPATH\')) exit; 
do_action(\'woocommerce_email_header\', $email_heading); 
?>
<p>Message to user</p>
<?php 
do_action(\'woocommerce_email_footer\'); 
?>
它工作得很好,但电子邮件没有用页眉和页脚包装,只是Message to user

如果我修改WC_Email 使用函数初始化:

function tb_send_activation_link($user_login, $user_email) {

  //My other code here....

  ob_start();

  // Get mail template
  woocommerce_get_template(\'emails/customer-reset-password-link.php\', array(
    \'user_login\'    => $user_login,
    \'blogname\'      => $blogname,
    \'email_heading\' => $email_heading,
    \'key\'           => $key
  ));

  // Get contents
  $message = ob_get_clean();

  $this->send( $user_email, $subject, $message, $headers, $attachments );
}
然后将插件中的函数更改为:

function send_activation_link() {
  global $woocommerce;

  //My other code here....

  $mailer = $woocommerce->mailer();
  $mailer->tb_send_activation_link($user_login, $user_email);
}
add_action( \'init\', \'send_activation_link\');
它发送完整的电子邮件(用页眉和页脚包装)。

不知道我做错了什么,也不知道如何从插件发送电子邮件。我真的不想更改WooCommerce的核心代码,因此非常感谢您提供任何关于如何解决此问题的建议。

提前,谢谢。

1 个回复
SO网友:Tomas

看来我已经找到了解决办法。$mailer = $woocommerce->mailer(); 必须在Get mail template

function send_activation_link() {
  global $woocommerce;

  //My other code here....

  $mailer = $woocommerce->mailer();

  ob_start();

  // Get mail template
  woocommerce_get_template(\'emails/customer-reset-password-link.php\', array(
    \'user_login\'    => $user_login,
    \'blogname\'      => $blogname,
    \'email_heading\' => $email_heading,
    \'key\'           => $key
  ));

  // Get contents
  $message = ob_get_clean();

  $mailer->send( $user_email, $subject, $message);
}
add_action( \'init\', \'send_activation_link\');

结束

相关推荐

从非核心php文件访问BloInfo、Get_Option和plugins_url

我正在创建一个插件,插件目录中有一个php文件,可以通过自定义重写url直接访问该文件。我需要这个文件能够使用标题中提到的三个功能。目前,我正在包括wp负载。php文件,它使我能够访问所有这些函数。然而,我一直在读到不应该包括wp负载,因为它可能不总是在同一个位置,而且它包括可能不需要的wordpress文件。这就是我如何包含wp负载:$wp_base = explode($_SERVER[\'PHP_SELF\'], $_SERVER[\'SCRIPT_FILENAME\']); require