Cum să modifici antetul email-urilor WooCommerce folosind un plugin personalizat

9 nov. 2017, 14:14:51
Vizualizări: 15.6K
Voturi: 1

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.

4
Comentarii

nu este nevoie să deconectați / reconectați. pur și simplu creați un fișier în directorul temei în woocommerce/emails/email-header.php iar trimiterea originală a e-mailului îl va folosi

mmm mmm
9 nov. 2017 15:10:10

Dar încerc să creez un plugin. Nu o dezvoltare de temă. Acest plugin este folosit pentru toate temele. Deci, în loc să ia șabloanele de e-mail din plugin-ul woocommerce, trebuie să ia șabloane personalizate create în directorul meu de plugin

melvin melvin
9 nov. 2017 18:45:46

Atunci în metoda email_header a clasei tale, pur și simplu afișează fișierul din plugin-ul tău, cu require de exemplu

mmm mmm
9 nov. 2017 19:18:17

nu funcționează

melvin melvin
9 nov. 2017 19:44:49
Toate răspunsurile la întrebare 2
14

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">
10 nov. 2017 07:56:38
Comentarii

Dar asta nu îmi arată conținutul nou.

melvin melvin
10 nov. 2017 08:22:03

funcția ta ar trebui să returneze cod

Malay Solanki Malay Solanki
10 nov. 2017 08:35:54

Încă folosește header-ul implicit din WooCommerce

melvin melvin
10 nov. 2017 08:36:29

unde scrii codul? În tema?

Malay Solanki Malay Solanki
10 nov. 2017 08:38:27

fișierul de plugin. Am creat un fișier de plugin

melvin melvin
10 nov. 2017 09:00:07

atunci ar trebui să funcționeze

Malay Solanki Malay Solanki
10 nov. 2017 09:05:18

Codul arată foarte bine. Permite-mi să verific din nou codul meu.

melvin melvin
10 nov. 2017 09:20:48

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

melvin melvin
10 nov. 2017 09:37:36

da, ar trebui să funcționeze

Malay Solanki Malay Solanki
10 nov. 2017 10:08:11

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

melvin melvin
10 nov. 2017 11:07:22

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

melvin melvin
16 nov. 2017 14:42:18

Adaugă înălțime și lățime fixe inline

Malay Solanki Malay Solanki
17 nov. 2017 06:31:19

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

melvin melvin
20 nov. 2017 05:55:16

Funcționează. Mulțumesc mult. Din moment ce am reputație scăzută, nu pot marca acest răspuns. O voi face când voi avea reputație suficientă pentru a face asta @malaysolanki

melvin melvin
20 nov. 2017 13:06:32
Arată celelalte 9 comentarii
0

Pentru cineva care face asta din tema ta.

  1. 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

  1. Lipește conținutul fișierului de la punctul 1 în următoarea cale

yourtheme/woocommerce/emails/email-header.php

  1. 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;
    }
  1. 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

https://stackoverflow.com/questions/49739353/get-the-order-object-in-woocommerce-email-header-template

de către @LoicTheAztec

19 iun. 2020 00:36:23