Tovább a tartalomhoz

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:

  1. 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.
  2. 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.
  3. E-mailek: az ütemezés szerint kimennek az emlékeztetők.
  4. 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.

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 );

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 );

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;
} );
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;
} );

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;
} );

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(
'nagyugyfel.example' => '[email protected]',
'vallalat.example' => '[email protected]',
);
foreach ( $corporate_domains as $domain => $redirect ) {
if ( strpos( $send_to_email, '@' . $domain ) !== false ) {
return $redirect;
}
}
return $send_to_email;
}, 10, 3 );

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;
} );

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.
$headers[] = 'Reply-To: [email protected]';
// 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;
} );

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 );
} );

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.';
} );
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.
} );

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' ) )
)
);

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:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások