Kosár helyreállítás testreszabása kóddal
Elhagyott kosarak követésének szűrése, extra adatok mentése, címzett, stílus, fejlécek és tartalom módosítása, események, adattábla.
A Kosár helyreállítása alapműködése a beállítások oldalon állítható. Ha ennél többre van szükséged, a folyamat minden szakaszához tartozik szűrő vagy akciókampó. A kódot a gyermektéma functions.php fájljába vagy egy kódrészlet-kezelő bővítménybe tedd, vagy a CheckoutWC → Haladó → Szkriptek oldal PHP kódrészletek mezőjébe (lásd PHP kódrészletek).
A folyamat szakaszai, hogy tudd, melyikbe nyúlj bele:
- Követés: amint a vásárló megadja az e-mail-címét a pénztáron, a rendszer elmenti a kosár tartalmát, az elérhetőségeit és a hozzáadott egyedi adatokat.
- Elhagyottnak jelölés: 5 percenként fut egy ellenőrzés, amely a beállított elhagyási idő után elhagyottnak jelöli a le nem zárt kosarat.
- E-mailek: az ütemezés szerint kimennek az emlékeztetők.
- Visszanyerés vagy elvesztés: ha a vásárló a linken át befejezi a rendelést, a kosár visszanyert lesz, ha a határidőn belül nem, akkor elveszett.
Mely kosarakat kövesse a rendszer?
Szekció neve “Mely kosarakat kövesse a rendszer?”Nem minden kosárnak kell emlékeztető. Érdemes kizárni a munkatársak tesztrendeléseit, a nagykereskedelmi vevőket, a nagyon kis értékű kosarakat, a nemrég vásárlókat és az előfizetések automatikus megújítását.
A cfw_acr_exclude_cart szűrő a kosár mentése előtt fut. Ha true értéket adsz vissza, a kosár követése kimarad.
| Paraméter | Tartalma |
|---|---|
$exclude |
Kizárjuk-e a kosarat (alapból false). |
$email |
A vásárló e-mail-címe. |
$cart_contents |
A kosár tartalma tömbként. |
$subtotal |
A kosár részösszege. |
$first_name |
A vásárló utóneve. |
$last_name |
A vásárló vezetékneve. |
$fields |
A pénztármezők összes értéke. |
$meta |
Az egyedi metaadatok tömbje. |
add_filter( 'cfw_acr_exclude_cart', function( $exclude, $email, $cart_contents, $subtotal, $first_name, $last_name, $fields, $meta ) { // Ide jön a saját feltételed. return $exclude;}, 10, 8 );Példa: kis értékű kosarak kizárása
Szekció neve “Példa: kis értékű kosarak kizárása”Egy emlékeztető költséggel jár (levélküldés, esetleges kedvezmény), ezért egy kis értékű kosárnál nem biztos, hogy megéri.
add_filter( 'cfw_acr_exclude_cart', function( $exclude, $email, $cart_contents, $subtotal ) { // 15 000 Ft alatti kosarakat nem követünk. if ( $subtotal < 15000 ) { return true; }
return $exclude;}, 10, 4 );Példa: nagykereskedelmi vevők kizárása
Szekció neve “Példa: nagykereskedelmi vevők kizárása”A nagykereskedelmi vevőknek gyakran saját kapcsolattartójuk van, az általános emlékeztető náluk zavaró lehet. (Szerepkör szerint a beállítások oldalon is kizárhatsz, ez a kód akkor kell, ha más feltételed van.)
add_filter( 'cfw_acr_exclude_cart', function( $exclude, $email ) { $user = get_user_by( 'email', $email );
if ( $user && in_array( 'wholesale_customer', $user->roles, true ) ) { return true; }
return $exclude;}, 10, 2 );Példa: nemrég vásárlók kizárása
Szekció neve “Példa: nemrég vásárlók kizárása”Aki három napja rendelt, és most újra nézelődik, nem hagyott el semmit. Neki az emlékeztető tolakodó lehet.
add_filter( 'cfw_acr_exclude_cart', function( $exclude, $email ) { $recent_orders = wc_get_orders( array( 'customer' => $email, 'date_after' => '14 days ago', 'status' => array( 'completed', 'processing' ), 'limit' => 1, ) );
if ( ! empty( $recent_orders ) ) { return true; }
return $exclude;}, 10, 2 );Példa: munkatársak és belső rendelések kizárása
Szekció neve “Példa: munkatársak és belső rendelések kizárása”add_filter( 'cfw_acr_exclude_cart', function( $exclude, $email ) { // A cég teljes tartománya. if ( strpos( $email, '@pelda-ceg.example' ) !== false ) { return true; }
// Vagy konkrét címek. $excluded_emails = array( );
if ( in_array( $email, $excluded_emails, true ) ) { return true; }
return $exclude;}, 10, 2 );További adatok mentése a kosárhoz
Szekció neve “További adatok mentése a kosárhoz”Alapból a rendszer a kosár tartalmát, a vásárló nevét, e-mail-címét és a részösszeget menti. A cfw_acr_cart_meta szűrővel egyedi adatokat fűzhetsz a kosárhoz. Ezek JSON-ként tárolódnak, és a teljes visszanyerési folyamat alatt elérhetők. Hasznos, ha tudni akarod, melyik csatornából jött a vásárló, szeretnéd szegmentálni a kosarakat, mintázatokat elemeznél, vagy az e-mail sablonban személyre szabnál.
add_filter( 'cfw_acr_cart_meta', function( $meta ) { // Ide jön a saját adatod. return $meta;} );Példa: marketing-forrás követése
Szekció neve “Példa: marketing-forrás követése”add_filter( 'cfw_acr_cart_meta', function( $meta ) { $meta['utm_source'] = isset( $_GET['utm_source'] ) ? sanitize_text_field( $_GET['utm_source'] ) : ''; $meta['utm_medium'] = isset( $_GET['utm_medium'] ) ? sanitize_text_field( $_GET['utm_medium'] ) : ''; $meta['utm_campaign'] = isset( $_GET['utm_campaign'] ) ? sanitize_text_field( $_GET['utm_campaign'] ) : '';
// Az előző oldal. $meta['referrer'] = isset( $_SERVER['HTTP_REFERER'] ) ? esc_url_raw( $_SERVER['HTTP_REFERER'] ) : '';
return $meta;} );Példa: belépőoldal mentése
Szekció neve “Példa: belépőoldal mentése”Ha az első oldalbetöltéskor munkamenet-változóba teszed a belépőoldalt, itt a kosárhoz kötheted.
add_filter( 'cfw_acr_cart_meta', function( $meta ) { if ( isset( $_SESSION['landing_page'] ) ) { $meta['landing_page'] = sanitize_url( $_SESSION['landing_page'] ); }
return $meta;} );Az e-mail címzettjének módosítása
Szekció neve “Az e-mail címzettjének módosítása”Előfordul, hogy nem az a megfelelő címzett, aki a pénztárat elkezdte: például cégnél a beszerzési osztály intézi a rendelést, közös fiókot többen használnak, vagy teszteléskor egy adott postafiókba akarod irányítani a leveleket.
A cfw_acr_send_to_email szűrő paraméterei: $send_to_email (az eredeti címzett), $cart (az elhagyott kosár objektuma) és $email_id (az e-mail sablon azonosítója).
add_filter( 'cfw_acr_send_to_email', function( $send_to_email, $cart, $email_id ) { // Ide jön a saját logikád. return $send_to_email;}, 10, 3 );Példa: céges címek átirányítása a beszerzésre
Szekció neve “Példa: céges címek átirányítása a beszerzésre”add_filter( 'cfw_acr_send_to_email', function( $send_to_email, $cart, $email_id ) { $corporate_domains = array( );
foreach ( $corporate_domains as $domain => $redirect ) { if ( strpos( $send_to_email, '@' . $domain ) !== false ) { return $redirect; } }
return $send_to_email;}, 10, 3 );Az e-mailek stílusa
Szekció neve “Az e-mailek stílusa”Az emlékeztető legyen a márkádhoz illő. A rendszer a küldés előtt a CSS-t beágyazza az elemekbe (Emogrifier könyvtárral), mert sok levelezőprogram a stíluslapot figyelmen kívül hagyja. Saját szabályokat a cfw_acr_email_custom_css szűrővel adhatsz hozzá, ami a CSS-szöveget adja vissza.
add_filter( 'cfw_acr_email_custom_css', function() { return ' /* Elsődleges gomb: a webhely gombszínéhez igazítva */ .btn-primary a { background-color: #2563eb !important; border-color: #2563eb !important; border-radius: 6px !important; }
/* Címsor */ h1 { color: #1e293b; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }
/* Kiemelt tartalomblokk */ .content-block { background: #f8fafc; border-left: 4px solid #2563eb; padding: 16px; }
/* Lábléc */ .footer { color: #64748b; font-size: 12px; } ';} );A stílusozható osztályok:
| Osztály | Mit stílusoz |
|---|---|
.body |
A levél külső burkolója. |
.container |
A fő tartalmi tároló (legfeljebb 580 képpont széles). |
.main |
A fehér tartalmi terület háttere. |
.content-block |
A belső margós tartalmi szakaszok. |
.btn-primary |
Az elsődleges gomb. |
.footer |
A lábléc a leiratkozási hivatkozással. |
.preheader |
Az előnézeti szöveg (a levélben rejtett, a postaládában látszik). |
A kosár terméktáblázatát külön a cfw_cart_table_styles szűrővel stílusozhatod: a kapott stílusszöveghez hozzáfűzöd a saját szabályaidat, és visszaadod.
add_filter( 'cfw_cart_table_styles', function( $styles ) { $styles .= ' .acr-cart-table img { border-radius: 8px; } .acr-cart-table td { padding: 12px 8px; } ';
return $styles;} );Az e-mail fejlécei
Szekció neve “Az e-mail fejlécei”A fejlécekkel beállíthatod például a válaszcímet, a prioritást (óvatosan használd) vagy saját követőazonosítót a levelezési elemzőhöz. A cfw_acr_email_headers szűrő a fejlécsorok tömbjét kapja.
add_filter( 'cfw_acr_email_headers', function( $headers ) { // Válaszcím, hogy a vásárló az ügyfélszolgálatnak tudjon válaszolni.
// Saját követőfejléc. $headers[] = 'X-ACR-Campaign: abandoned-cart-recovery';
return $headers;} );A kész e-mail tartalmának módosítása
Szekció neve “A kész e-mail tartalmának módosítása”A cfw_acr_email_content szűrő a teljesen kiállított levél HTML-jét kapja, vagyis miután a helyettesítők (például {{checkout_url}}) már a tényleges értékükre cserélődtek.
Példa: UTM-paraméterek a pénztárlinkekhez
Szekció neve “Példa: UTM-paraméterek a pénztárlinkekhez”Így Google Analyticsben látható, a sorozat melyik e-mailje hozza a legtöbb visszanyerést.
add_filter( 'cfw_acr_email_content', function( $content ) { $content = preg_replace_callback( '/(\?cfw_acr_cart_id=[^"&\s]+)/', function( $matches ) { return $matches[1] . '&utm_source=checkoutwc&utm_medium=email&utm_campaign=cart_recovery'; }, $content );
return $content;} );Példa: nyomkövető pixel beszúrása
Szekció neve “Példa: nyomkövető pixel beszúrása”Egyes levelezőplatformok pixellel mérik a megnyitást. A pixelt a záró </body> elé szúrhatod be.
add_filter( 'cfw_acr_email_content', function( $content ) { $tracking_pixel = '<img src="https://pelda.example/pixel.gif" width="1" height="1" alt="" />';
return str_replace( '</body>', $tracking_pixel . '</body>', $content );} );A leiratkozás utáni üzenet
Szekció neve “A leiratkozás utáni üzenet”Amikor a vásárló a leiratkozási hivatkozásra kattint, megerősítő üzenetet lát. Ezt a cfw_unsubscribe_successful_message szűrővel átírhatod a saját hangodra.
add_filter( 'cfw_unsubscribe_successful_message', function( $message ) { return 'Leiratkoztál a kosár-emlékeztetőkről. A továbbiakban nem küldünk neked levelet az elhagyott kosaradról.';} );Akciókampók a folyamat eseményeihez
Szekció neve “Akciókampók a folyamat eseményeihez”| Kampó | Mikor fut | Mire jó |
|---|---|---|
cfw_checkout_update_order_review |
Amikor egy kosár követése frissül. | Adatok szinkronizálása külső rendszerbe, például CRM-be. |
cfw_acr_send_email |
Közvetlenül minden emlékeztető kiküldése előtt. | Naplózás, integrációk. |
cfw_acr_mark_lost |
Amikor egy kosár elveszett lesz (lejárt a visszanyerési idő). | Például záró „hiányzol” kampány indítása másik platformon. |
add_action( 'cfw_checkout_update_order_review', function() { if ( function_exists( 'sajat_elemzes_kovetes' ) ) { sajat_elemzes_kovetes( 'cart_tracked', array( 'email' => WC()->customer->get_billing_email(), 'cart_total' => WC()->cart->get_total( 'edit' ), ) ); }} );
add_action( 'cfw_acr_send_email', function() { if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) { error_log( 'ACR: emlékeztető kiküldve: ' . current_time( 'mysql' ) ); }} );
add_action( 'cfw_acr_mark_lost', function() { // Itt indíthatsz winback-kampányt a levelezőplatformodban.} );Az adattábla
Szekció neve “Az adattábla”Haladó integrációkhoz közvetlenül is lekérdezheted a kosarakat. Az elhagyott kosarak a wp_cfw_acr_carts táblában vannak (a wp_ az adatbázis előtagja).
| Oszlop | Típus | Tartalma |
|---|---|---|
id |
egész szám | Elsődleges kulcs. |
email |
szöveg | A vásárló e-mail-címe. |
first_name |
szöveg | Utónév. |
last_name |
szöveg | Vezetéknév. |
cart |
hosszú szöveg | A kosár tartalma JSON-ként. |
subtotal |
tizedes szám | A részösszeg a követés idején. |
status |
szöveg | active, abandoned, recovered vagy lost. |
created |
dátum és idő | Mikor kezdődött a követés. |
emails_sent |
egész szám | A kiküldött emlékeztetők száma. |
cart_hash |
szöveg | Egyedi azonosító a kosár biztonságos visszaállító linkjéhez. |
Példa: az elmúlt 7 nap elhagyott kosarai részösszeg szerint csökkenő sorrendben.
global $wpdb;$table = $wpdb->prefix . 'cfw_acr_carts';
$abandoned = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$table} WHERE status = %s AND created > %s ORDER BY subtotal DESC", 'abandoned', gmdate( 'Y-m-d H:i:s', strtotime( '-7 days' ) ) ));Kosarak követése e-mail-cím nélkül
Szekció neve “Kosarak követése e-mail-cím nélkül”Alapból a rendszer csak akkor követ kosarat, ha a vásárló megadta az e-mail-címét. A cfw_acr_track_cart_without_emails szűrővel korábban is követhetsz, például bejelentkezett felhasználóknál.
add_filter( 'cfw_acr_track_cart_without_emails', function( $track ) { if ( is_user_logged_in() ) { return true; }
return $track;} );Óvatosan használd: e-mail-cím nélkül nem tud emlékeztetőt küldeni a rendszer, ezért ez főleg akkor hasznos, ha a követési adatot elemzésre használod, nem levélküldésre.
Készült: