【问题标题】:WooCommerce Sensei Email customizationWooCommerce Sensei 电子邮件自定义
【发布时间】:2025-12-17 16:20:07
【问题描述】:

当过滤器跨模板共享时,如何在一个模板中更改标题或文本?

插件代码(在 class-woothemes-sensei-email-learner-graded-quiz.php 中)

$this->subject = apply_filters( 'sensei_email_subject', sprintf( __( '[%1$s] You have completed a course', 'woothemes-sensei' ), get_bloginfo( 'name' ) ), $this->template);

我的自定义代码(在functions.php中)

add_filter( 'sensei_email_subject', 'my_custom_sensei_email_subject', 'class_woothemes_sensei_email_learner_graded_quiz' );

function my_custom_sensei_email_subject( $subject ) {

    global $woothemes_sensei;

    $subject = sprintf( __( '[%1$s] Your Evaluation has been graded', 'woothemes-sensei' ), get_bloginfo( 'name' ));    

    return $subject;
} 

// This changes the title regardless of which template is being used.

【问题讨论】:

  • 为糟糕的语法道歉
  • 谢谢 LoicTheAztec!
  • 对不起 - 是的,它应该有“ ); ”在最后 - 但那是在插件本身,而不是我的自定义代码。

标签: php wordpress woocommerce hook-woocommerce email-notifications


【解决方案1】:

在您的函数中,缺少一个参数,您可以看到该过滤器挂钩上有 2 个:$subject$template(这是可选的)。

因此,您需要在函数中添加第二个参数$template。然后在 if 语句中,您只能针对正确的模板。

假设正确的目标模板段是:learner_graded_quiz

所以正确的代码应该是:

add_filter( 'sensei_email_subject', 'my_custom_sensei_email_subject', 10, 2 );
function my_custom_sensei_email_subject( $subject, $template ) {
    // Only for your specific template
    if( 'learner-graded-quiz' != $template ) return $subject;

    $subject = sprintf( __( '[%1$s] Your Evaluation has been graded', 'woothemes-sensei' ), get_bloginfo( 'name' ));    

    return $subject;
} 

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

没有测试,因为我没有感觉……

您的代码中不需要global $woothemes_sensei;,因为它没有被使用。

【讨论】:

  • 太棒了 - 谢谢。我替换你的 ' ! =' 和 '==' 现在完美了!
  • 好的 - 非常感谢。你能帮助解决这个问题的另一个方面吗?我也在尝试从数组中提取数据,但还没有成功!