我想覆盖woocommerce电子邮件模板。首先,它检查我定义的模板文件夹中的模板。如果它没有找到任何,那么它应该从woocommerce文件夹中获取模板文件。但我的插件并没有从woocommerce文件夹中获取。问题是没有从woocommerce文件夹加载结帐,商店等模板。
add_filter( 'woocommerce_locate_template', array( $this, 'woo_locate_template' ), 999, 3);
public function woo_locate_template($template,$template_name,$template_path){
if(in_array($template_name, $this->templates)){
return $this->get_email_template_path($template_name);
}
}
public function get_email_template_path($template_name){
$email_template_path = TH_WEC_EMAIL_TEMPLATE_PATH.$template;
if(file_exists($email_template_path)){
return $email_template_path;
}
return '';
}
public function init_template_name(){
$this->templates = array(
'emails/email-header.php',
'emails/email-footer.php',
'emails/email-styles.php',
'emails/admin-new-order.php',
'emails/admin-cancelled-order.php',
'emails/admin-failed-order.php',
'emails/customer-completed-order.php',
'emails/customer-inovice.php',
'emails/customer-new-account.php',
'emails/customer-on-hold-order.php',
'emails/customer-processing-order.php',
'emails/customer-refunded-order.php',
'emails/customer-reset-password.php',
);
}
答案 0 :(得分:1)
错误是没有返回默认路径。也就是说,$ template
public function woo_locate_template($template,$template_name,$template_path){
$_template = $template;
if(in_array($template_name, $this->templates)){
return $this->get_email_template_path($template_name);
}
return $_template;
}
答案 1 :(得分:0)
最简单的方法是将模板移动到活动模板目录中。 路径应为:模板根> woocommerce>电子邮件强>
然后从插件>中复制文件woocommerce>模板>电子邮件,放在上面的文件夹中并根据需要进行修改。
这样,将自动从WC文件夹中获取不在主题目录中的邮件模板。