Cum să modifici antetul email-urilor WooCommerce folosind un plugin personalizat
Doresc să înlocuiesc template-ul de antet al email-urilor WooCommerce cu unul nou pentru a putea adăuga condiții în template-ul de antet și a prelua valori din panoul de control (pentru a schimba culoarea antetului în funcție de preferințele utilizatorului). Am creat un fișier de plugin pentru a realiza acest lucru.
Am urmat mai multe tutoriale, dar tot ce am obținut au fost erori. Am o clasă cu următorul cod:
public function __construct(){
add_action('woocommerce_email',array($this,'woocommerce_email'));
}
Acum am adăugat cod pentru a elimina hook-ul implicit al antetului:
public function woocommerce_email($mailer){
remove_action('woocommerce_header',array($mailer,'email_header'));
add_action('woocommerce_header',array($this,'email_header'));
acum apelez template-ul:
public function email_header() {
wc_get_template( 'emails/email-header.php');
}
Nu transmit nimic către fișierul template. Deci nu sunt transmisi parametri către funcții. Voiam doar să văd dacă template-ul meu este folosit. De asemenea, presupun că $mailer
face parte din clasa WooCommerce. Orice ajutor ar fi apreciat.
Rețineți că aceasta este o funcționalitate de plugin, așa că nu sunt interesat de înlocuirea template-urilor de email WooCommerce.

Trebuie să elimini acțiunea woocommerce_email_header
remove_action( 'woocommerce_email_header', 'email_header');
Care a fost înregistrată în
wp-content\plugins\woocommerce\includes\class-wc-emails.php
Apoi adaugă propria ta acțiune
add_action('woocommerce_email_header','numele_functiei_tale');
Funcția ta ar trebui să afișeze HTML
În mod implicit, în template-ul header există următorul cod
<?php
/**
* Antet Email
*
* Acest template poate fi suprascris copiindu-l în yourtheme/woocommerce/emails/email-header.php.
*
* CU TOATE ACESTEA, ocazional WooCommerce va avea nevoie să actualizeze fișierele de template și tu
* (dezvoltatorul temei) va trebui să copiezi noile fișiere în tema ta pentru a
* menține compatibilitatea. Încercăm să facem acest lucru cât mai rar posibil, dar se întâmplă.
* Când acest lucru se întâmplă, versiunea fișierului de template va fi actualizată și
* fișierul readme va lista orice schimbări importante.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates/Emails
* @version 2.4.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Ieși dacă este accesat direct
}
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php bloginfo( 'charset' ); ?>" />
<title><?php echo get_bloginfo( 'name', 'display' ); ?></title>
</head>
<body <?php echo is_rtl() ? 'rightmargin' : 'leftmargin'; ?>="0" marginwidth="0" topmargin="0" marginheight="0" offset="0">
<div id="wrapper" dir="<?php echo is_rtl() ? 'rtl' : 'ltr'?>">
<table border="0" cellpadding="0" cellspacing="0" height="100%" width="100%">
<tr>
<td align="center" valign="top">
<div id="template_header_image">
<?php
if ( $img = get_option( 'woocommerce_email_header_image' ) ) {
echo '<p style="margin-top:0;"><img src="' . esc_url( $img ) . '" alt="' . get_bloginfo( 'name', 'display' ) . '" /></p>';
}
?>
</div>
<table border="0" cellpadding="0" cellspacing="0" width="600" id="template_container">
<tr>
<td align="center" valign="top">
<!-- Antet -->
<table border="0" cellpadding="0" cellspacing="0" width="600" id="template_header">
<tr>
<td id="header_wrapper">
<h1><?php echo $email_heading; ?></h1>
</td>
</tr>
</table>
<!-- Sfârșit Antet -->
</td>
</tr>
<tr>
<td align="center" valign="top">
<!-- Corp -->
<table border="0" cellpadding="0" cellspacing="0" width="600" id="template_body">
<tr>
<td valign="top" id="body_content">
<!-- Conținut -->
<table border="0" cellpadding="20" cellspacing="0" width="100%">
<tr>
<td valign="top">
<div id="body_content_inner">

Dacă fișierul meu șablon pentru antetul de email nu conține nimic în afară de un echo, WooCommerce va folosi cel implicit? @malaysolanki

Mulțumesc frate. Funcționează. A fost o greșeală în numele acțiunii mele hook. Salutări @Malaysolanki

Știi de ce imaginea nu este afișată în antetul e-mailului? Tag-ul img este vizibil la inspectarea în browser

O să încerc și o să te anunț. Ești cel mai bun ajutor. Mulțumesc pentru mentalitatea ta de ajutorare @Malay

Pentru cineva care face asta din tema ta.
- Copiază conținutul șablonului de e-mail pe care îl poți găsi aici:
https://github.com/woocommerce/woocommerce/blob/master/templates/emails/email-header.php
- Lipește conținutul fișierului de la punctul 1 în următoarea cale
yourtheme/woocommerce/emails/email-header.php
- Opțional, dacă ai nevoie de obiectul comenzii pentru a obține o anumită dată, trebuie să adaugi următoarele în fișierul functions.php
add_action( 'woocommerce_email_header', 'email_header_before', 1, 2 );
function email_header_before( $email_heading, $email ){
$GLOBALS['email'] = $email;
}
- Opțional, iar apoi în fișierul șablon pe care tocmai l-ai creat, poți folosi astfel
// Apelează obiectul global WC_Email
global $email;
// Obține o instanță a obiectului WC_Order
$order = $email->object;
Pașii 3 și 4, obținuți din acest răspuns
de către @LoicTheAztec
