Modificare l'intestazione delle email WooCommerce utilizzando un plugin personalizzato
Voglio cambiare il template dell'intestazione delle email woocommerce con uno nuovo per poter aggiungere condizioni nel template dell'intestazione e ottenere valori dalla dashboard (per cambiare il colore dell'intestazione in base all'input dell'utente dalla dashboard). Ho creato un file plugin per farlo.
Ho seguito diversi tutorial e tutto ciò che ho ottenuto sono una serie di errori. Ho una classe con il seguente codice:
public function __construct(){
add_action('woocommerce_email',array($this,'woocommerce_email'));
}
Ora ho aggiunto il codice per rimuovere l'hook dell'intestazione predefinita
public function woocommerce_email($mailer){
remove_action('woocommerce_header',array($mailer,'email_header'));
add_action('woocommerce_header',array($this,'email_header'));
ora chiamo il template
public function email_header() {
wc_get_template( 'emails/email-header.php');
}
Non sto passando nulla al file template. Quindi nessun parametro viene passato alle funzioni. Volevo solo vedere che il mio template venisse preso.
Inoltre, presumo che $mailer
sia parte della classe woocommerce. Qualsiasi aiuto sarebbe apprezzato.
Si prega di notare che questa è una funzionalità del plugin quindi non sono interessato a sostituire i template delle email woocommerce.

Devi rimuovere l'azione woocommerce_email_header
remove_action( 'woocommerce_email_header', 'email_header');
Che è stata registrata in
wp-content\plugins\woocommerce\includes\class-wc-emails.php
Poi aggiungi la tua azione personalizzata
add_action('woocommerce_email_header','nome_tua_funzione');
La tua funzione deve generare output HTML
Di default c'è il seguente codice nel template dell'header
<?php
/**
* Intestazione Email
*
* Questo template può essere sovrascritto copiandolo in yourtheme/woocommerce/emails/email-header.php.
*
* TUTTAVIA, occasionalmente WooCommerce avrà bisogno di aggiornare i file template e tu
* (lo sviluppatore del tema) dovrai copiare i nuovi file nel tuo tema per
* mantenere la compatibilità. Cerchiamo di farlo il meno possibile, ma a volte
* è necessario. Quando ciò accade, la versione del file template verrà incrementata
* e il readme elencherà i cambiamenti importanti.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates/Emails
* @version 2.4.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
?>
<!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">
<!-- Header -->
<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>
<!-- End Header -->
</td>
</tr>
<tr>
<td align="center" valign="top">
<!-- Body -->
<table border="0" cellpadding="0" cellspacing="0" width="600" id="template_body">
<tr>
<td valign="top" id="body_content">
<!-- Content -->
<table border="0" cellpadding="20" cellspacing="0" width="100%">
<tr>
<td valign="top">
<div id="body_content_inner">

Se il mio file template dell'intestazione email non contiene nulla tranne un echo, WooCommerce prenderà quello predefinito? @malaysolanki

Grazie fratello. Funziona. C'era un errore nel nome del mio action hook. Saluti @Malaysolanki

Sai perché l'immagine non viene mostrata nell'intestazione dell'email? Il tag img è visibile quando si ispeziona con il browser

Fammi provare e ti farò sapere. Sei il miglior aiutante. Grazie per la tua mentalità d'aiuto @Malay

Per chi esegue questa operazione dal proprio tema.
- Copia il contenuto del modello email che puoi trovare qui:
https://github.com/woocommerce/woocommerce/blob/master/templates/emails/email-header.php
- Incolla il contenuto del file del punto 1 nel seguente percorso
tuotema/woocommerce/emails/email-header.php
- Opzionale se hai bisogno dell'oggetto ordine per ottenere un dato devi aggiungere quanto segue nel tuo functions.php
add_action( 'woocommerce_email_header', 'email_header_before', 1, 2 );
function email_header_before( $email_heading, $email ){
$GLOBALS['email'] = $email;
}
- Opzionale, e poi nel file template che hai appena creato usalo in questo modo
// Chiama l'oggetto globale WC_Email
global $email;
// Ottieni un'istanza dell'oggetto WC_Order
$order = $email->object;
I passaggi 3 e 4, ottenuti da questa risposta
di @LoicTheAztec
