Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

📝 WooCommerce'i tellimuse märkmete lisamine e-kirjadele: täielik juhend

📝 WooCommerce'i tellimuse märkmete lisamine e-kirjadele: täielik juhend

Klient esitab tellimuse ja teie jätate halduspaneelis märkme: täpsustasite tarnekuupäeva, lisasite jälgimisnumbri või kirjutasite lihtsalt „helista enne saatmist". Kuid klient seda ei näe. Tellimuse märkmed on WooCommerce’is vaikimisi ainult halduspaneelis, tellimuse muutmise külgribal. Need ei ilmu ostjale saadetavates e-kirjades.

Probleemi lahendab üksainus koodijupp failis functions.php. Pole vaja pluginaid ega malli muutmist, vaid puhas konks, mis väljastab märkmed e-kirja sisusse. Praktikas oleme seda lähenemist klientide poodides kasutanud juba mitu aastat ja ükski WooCommerce’i uuendus pole seda katkestanud. Selles juhendis vaatame, kuidas WooCommerce tellimuse märkmeid salvestab, millist konksu kasutada ja kuidas väljundit oma vajadustele kohandada.

💡 Kiirülevaade:

  • Kuidas WooCommerce tellimuse märkmeid salvestab: order_note kommentaari tüüp ja funktsioon wc_get_order_notes()
  • Kaks lähenemist e-kirjade kohandamiseks: malli ülekatted või konksud ja millal kumba valida
  • Kasutusvalmis koodijupp märkmete kuvamiseks tellimuse lõpetamise e-kirjas koos rea-realt selgitusega
  • Kohandamine: loendi kujundamine, ainult kliendimärkmete filtreerimine, lihttekstiga e-kirjade toetamine
  • Testimine e-kirja eelvaate kaudu halduspaneelis, ilma päris kliente rämpspostiga tülitamata

1. Samm: kuidas WooCommerce tellimuse märkmeid salvestab

WooCommerce salvestab märkmeid kui WordPressi order_note tüüpi kommentaare. Iga tellimusega seotud toiming (staatuse muutus, tagasimakse, administraatori märge või kliendi sõnum) salvestatakse wp_comments tabelisse lipuga comment_type = 'order_note'.

Sisemiste ja kliendimärkmete erinevus määratakse is_customer_note meta-välja abil. Kui märkme lisamisel on märkeruut „Nähtav Minu kontol" lubatud, määrab WooCommerce is_customer_note = true ja ostja näeb seda oma kontol. Tavalisi sisemisi märkmeid (is_customer_note = false) ei kuvata kliendile kusagil.

High Performance Order Storage (HPOS) kasutuselevõtuga WooCommerce 8.2+ versioonis liikusid märkmed eraldi wp_wc_order_notes tabelisse. Otsesed SQL-päringud wp_comments tabelisse, kui HPOS on lubatud, võivad tagastada tühje tulemusi. Seetõttu on get_comments() asemel parem kasutada wc_get_order_notes(), mis töötab korrektselt olenemata salvestusrežiimist.

2. Samm: mallid või konksud, kumb lähenemine valida

WooCommerce pakub e-kirjade kohandamiseks kahte teed: malli ülekatted ja tegevuskonksud. Kummalgi on oma kasutusala.

Malli ülekatted. Kopeerite faili kaustast woocommerce/templates/emails/ kausta yourtheme/woocommerce/emails/ ja muudate HTML-i otse. Eelis on täielik kontroll märgendi üle. Puudus on see, et pärast suuremaid WooCommerce’i uuendusi võib teie mall praegusest versioonist erineda ja e-kirjad võivad hakata katki minema. Malli struktuuri dokumentatsioon on nüüd saidil woocommerce.com, mitte vanal docs.woothemes.com saidil.

Konksud. Kinnitate tagasikutse tegevusele woocommerce_email_order_meta ja WooCommerce kutsub teie funktsiooni välja õiges kohas e-kirjas. Eelis on see, et see ei sõltu malli versioonidest ja töötab kohe pärast tuumauuendusi. Puudus on see, et olete piiratud konksu asukohaga (see käivitub tellimuse metaandmete plokis, pärast toodete tabelit).

Kriteerium

Mallid

Konksud

Kontroll märgendi üle

Täielik

Konksu asukoha piires

Vastupidavus uuendustele

Madal

Kõrge

Rakendamise keerukus

Kõrgem

Madalam

Parim kasutus

Täielik e-kirja ümberkujundus

Ühe ploki lisamine

Meie ülesande jaoks, milleks on märkmete kuvamine, on konks enam kui piisav. Kui teil on vaja e-kirjade paigutust täielikult ümber kujundada, kasutage malle ja planeerige nende uuendamist umbes iga kuue kuu tagant.

3. Samm: koodi lisamine faili functions.php

Konks woocommerce_email_order_meta käivitub kõigis WooCommerce’i tehingukirjades: tellimuse kinnitus, lõpetamine, tühistamine, arve ja teised. Tagasikutsele edastatakse neli parameetrit: tellimuse objekt $order, lipp $sent_to_admin, lipp $plain_text ja e-kirja objekt $email.

Paigutage see kood oma aktiivse teema faili functions.php (või Code Snippets plugina kaudu, mis on turvalisem, kuna see ei kao teema vahetamisel):

1add_action( 'woocommerce_email_order_meta', 'sd_add_order_notes_to_email', 10, 4 );
2
3function sd_add_order_notes_to_email( $order, $sent_to_admin, $plain_text, $email ) {
4 // Don't break the plain-text version of the email
5 if ( $plain_text ) {
6 echo "\n\n" . esc_html__( 'Order Notes:', 'woocommerce' ) . "\n";
7
8 $notes = wc_get_order_notes( array(
9 'order_id' => $order->get_id(),
10 'type' => 'customer',
11 ) );
12
13 if ( empty( $notes ) ) {
14 echo esc_html__( 'No notes for this order.', 'woocommerce' ) . "\n";
15 return;
16 }
17
18 foreach ( $notes as $note ) {
19 echo '- ' . wp_strip_all_tags( $note->content ) . "\n";
20 }
21 return;
22 }
23
24 // HTML version: get only customer notes
25 $notes = wc_get_order_notes( array(
26 'order_id' => $order->get_id(),
27 'type' => 'customer',
28 ) );
29
30 if ( empty( $notes ) ) {
31 return;
32 }
33
34 echo '<h2>' . esc_html__( 'Order Notes', 'woocommerce' ) . '</h2>';
35 echo '<ul class="order-notes-list" style="list-style:none;padding:0;margin:0 0 24px;">';
36
37 foreach ( $notes as $note ) {
38 $note_date = sprintf(
39 '%1$s at %2$s',
40 date_i18n( get_option( 'date_format' ), strtotime( $note->date_created ) ),
41 date_i18n( get_option( 'time_format' ), strtotime( $note->date_created ) )
42 );
43
44 printf(
45 '<li style="background:#f9f9f9;border-left:4px solid #7f54b3;padding:12px 16px;margin-bottom:10px;border-radius:0 4px 4px 0;">'
46 . '<div style="margin-bottom:4px;">%s</div>'
47 . '<small style="color:#888;">%s</small>'
48 . '</li>',
49 wp_kses_post( nl2br( $note->content ) ),
50 esc_html( $note_date )
51 );
52 }
53
54 echo '</ul>';
55}

Siin on selgitus ridade kaupa:

  • 1. rida. Registreerime konksu prioriteediga 10 ja võtame vastu kõik 4 parameetrit. Ilma 10, 4-ta edastab WooCommerce ainult esimese argumendi ja saate veateate.
  • Read 5-20. Lihttekstiga e-kirjade käsitlemine. Mõned e-kirjad saadetakse tekstivormingus, seega väljastame märkmed sidekriipsudega loendina, ilma HTML-ita.
  • Read 24-28. wc_get_order_notes() küsib ainult kliendimärkmeid (type => 'customer'). Eemaldage filter, et kuvada kõiki märkmeid, sealhulgas sisemisi (staatuse muutused, tagasimaksed). Kui massiiv on tühi, ei väljasta me midagi ega risusta e-kirja.
  • Read 34-38. Vormindame kuupäeva, kasutades date_i18n(), mis arvestab saidi keele- ja kuupäeva-/kellaajavormingu seadeid.
  • Read 40-48. printf() väljastab iga märkme kujundatud plokis: lilla riba vasakul, hele taust, kuupäev all hallis kirjas.

Kood ei kasuta väliseid sõltuvusi ja ühildub WooCommerce 3.2+ versiooniga (funktsioon wc_get_order_notes võeti kasutusele selles versioonis) ja HPOS-iga (natiivne tugi alates 8.2+).

4. Samm: testimine ilma kliente rämpspostiga tülitamata

Pärast koodi lisamist ärge jääge päris tellimust testimiseks ootama. WooCommerce pakub sisseehitatud e-kirja eelvaadet: WooCommerce → Seaded → E-kirjad → klõpsake mis tahes e-kirjal → nupp „Eelvaade" allosas. Näete e-kirja nii HTML- kui ka lihttekstina, kasutades päris tellimust (kasutatakse kõige uuemat tellimust). Kui tellimusi pole, looge üks test-tellimus käsitsi.

Mida kontrollida:

  • Kliendimärge, millel on lubatud „Nähtav Minu kontol", ilmub e-kirjas;
  • Sisemine märge (ilma märkeruuduta) ei ilmu (kui jätsite type => 'customer');
  • E-kirja lihttekstiversioon ei ole katki (vahetage eelvaate all oleva lingi kaudu);
  • Märkmete plokk ei kordu administraatori e-kirjades (vajadusel lisage kontroll if ( $sent_to_admin ) return;).

Kui kasutate Code Snippetsit, siis lihtsalt deaktiveerige koodijupp, et tagasi võtta. Kui muutsite faili functions.php, kommenteerige kood välja või kustutage see. Andmebaasi ei jää jälgi.

⁉️🤔 Korduma kippuvad küsimused

Kas ma saan kuvada KÕIKI märkmeid, mitte ainult kliendimärkmeid?

Jah. Asendage 'type' => 'customer' väärtusega 'type' => 'internal', et saada ainult sisemised märkmed. Eemaldage parameeter type täielikult, et saada kõik märkmed. Pidage meeles, et sisemised märkmed võivad sisaldada teenuseteavet (tagasimakse ID-d, summad), mida kliendid ei peaks nägema. Enamiku poodide jaoks piisab 'type' => 'customer'-st. Kui soovite väljundit eraldada, looge kaks plokki: kõigepealt kliendimärkmed pealkirjaga „Tellimuse kommentaarid", seejärel sisemised märkmed pealkirjaga „Täitmise üksikasjad" (see on administraatori e-kirjade jaoks, kasutades lippu $sent_to_admin).

Kas kood töötab konkreetse e-kirja või kõigi jaoks?

Konks woocommerce_email_order_meta käivitub kõigis tehingukirjades: tellimus lõpetatud, tellimus töötlemisel, tellimus ootel, kliendiarve ja nii edasi. Kui teil on vaja piirata väljundit ainult tellimuse lõpetamise e-kirjaga, ümbritsege kood kontrolliga:

1> if ( 'customer_completed_order' !== $email->id ) {
2> return;
3> }
4>

E-kirjade ID-de täielik loend on saadaval WooCommerce’i dokumentatsioonis: customer_completed_order · customer_processing_order · customer_on_hold_order · customer_invoice · customer_refunded_order · customer_new_account · new_order · cancelled_order · failed_order.

Kas faili functions.php muutmine on turvaline töötaval saidil?

functions.php otse muutmine on riskantne lähenemine. Süntaksiviga (lisasulg, sulgemata jutumärk) põhjustab kogu saidil valge ekraani kuvamise. Turvalisem on kasutada Code Snippets pluginat, mis võimaldab PHP koodijuppe halduspaneeli kaudu lisada ja keelab automaatselt koodi, mis põhjustab saatuslikke vigu. Alternatiiv on WPCode (tasuta versioon wordpress.org-is), mis pakub sama funktsionaalsust pluss tingimusloogikat (ainult administraatorile, ainult teatud lehtedel). Kui te siiski muudate faili functions.php, tehke failist varukoopia ja hoidke FTP-juurdepääs käepärast. Valge ekraani parandab functions.php asendamine varukoopiast pärit originaaliga.

Märkmed korduvad e-kirjades, mida ma valesti tegin?

Kaks tõenäolist põhjust. Esiteks: lisasite koodi nii faili functions.php kui ka koodijuppide plugina kaudu, seega käivitub konks kaks korda. Hoidke alles ainult üks. Teiseks: teie teema või mõni muu plugin kinnitab juba sellele samale konksule tagasikutse. Kontrollige, otsides projekti koodist (grep -r "woocommerce_email_order_meta" wp-content/). Kui dubleerimine on tingitud pluginast, eemaldage lihtsalt oma kood. Kui teemast, ümbritsege oma tagasikutse funktsiooniga remove_action() enne add_action(), et tagada ainult ühe töötleja käivitumine.

Kokkuvõte: kas tasub lisada märkmeid kliendi e-kirjadesse

Suhtluse läbipaistvus on üks odavamaid viise klienditoe töökoormuse vähendamiseks. Kui klient näeb e-kirjas „Jälgimisnumber: X123456789, tarne 15. juuni", ei lähe ta vestlusesse küsima „kus mu tellimus on?" Üks koodijupp, null pluginat, viis minutit rakendamiseks ja tulemust mõõdetakse kümnetes säästetud pöördumistes kuus.

Kui teie e-kirjad on juba mallide kaudu kohandatud, põimige märkmete väljund otse malli, selle asemel et kasutada konksu. Kui kasutate e-kirjade kohandamise pluginat (Kadence, YayMail, ShopMagic), on igaühel neist oma mehhanism dünaamiliste plokkide lisamiseks, seega kasutage koodi asemel seda.

Proovige ühe e-kirja tüübiga (Tellimus lõpetatud), testige test-tellimusel ja hinnake nädala pärast, kas saate klientidelt vähem korduvaid küsimusi. Peaaegu kindlasti jah.