Proč byste měli automatizovat stav vyprodaných produktů?
Provozování e-shopu může být časově náročné, zejména pokud máte širokou nabídku produktů. Udržování aktuálních informací o dostupnosti zboží je ke spokojení zákazníků klíčové. Vyprodané produkty, které stále zůstávají publikované, mohou zbytečně zatěžovat váš e-shop a způsobit frustraci zákazníkům, kteří si je chtějí koupit.
Převedením vyprodaných produktů do konceptů tedy vyřešíme hned několik problémů naráz:
- Zmatení zákazníků – Zákazníci teprve po rozkliknutí produktu zjistí, že není dostupný, což může vést k frustraci.
- Zatěžování výkonu e-shopu – Větší množství vyprodaných produktů může zbytečně zpomalit načítání stránek.
- Horší konverzní poměry – Zákazníci mohou mít pocit, že váš e-shop není dobře spravovaný.
Ještě než začnete:
Zkontrolujte, jestli používáte „Child theme“ vaší šablony, protože by se jinak vložený snippet ihned po aktualizaci šablony smazal! (Vzhled > Šablony)
Pokud na vašem webu nepoužíváte child theme, sáhněte po některém z pluginů, pomocí kterého budete mít možnost na web přidávat snippety, které se po aktualizaci šablony neodstraní. (mohu doporučit plugin „Code Snippets„)
Řešení: Automatické přepnutí produktů na koncept pomocí jednoduchého snippetu
- Otevřete administraci WordPressu a přejděte do záložky Vzhled > Editor souboru šablony > functions.php
- Následující kód vložte na konec tohoto souboru a změny uložte
/*převede vyprodané produkty do konceptu*/
add_action('init', function() {
$args = array(
'post_type' => 'product',
'posts_per_page' => -1, // Získá všechny produkty
'post_status' => 'publish', // Jen publikované produkty
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '='
),
),
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$product = wc_get_product(get_the_ID());
// Pokud má produkt 0 kusů na skladě, přepne jej na koncept
if ($product->get_stock_quantity() == 0) {
$product->set_status('draft'); // Změní stav na koncept
$product->save();
}
}
wp_reset_postdata();
}
});
Tento skript se spustí pouze při načtení stránky administrace (ne při každém načítání běžného front-endu e-shopu). Nicméně, u velkého množství produktů může vyhledávání všech publikovaných produktů a jejich kontrola způsobit trochu zátěže při každém načítání administrace, což by mohlo ovlivnit výkon.
Pokud tedy vlastníte eshop s velkým množstvím produktů, a chcete optimalizovat tento proces, doporučuji přidat snippet níže, který bude produkty pravidelně kontrolovat pouze jednou denně:
// Nastavení cron jobu, který spustí kontrolu jednou denně
if (!wp_next_scheduled('check_out_of_stock_products')) {
wp_schedule_event(time(), 'daily', 'check_out_of_stock_products');
}
add_action('check_out_of_stock_products', function() {
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '='
),
),
);
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$product = wc_get_product(get_the_ID());
if ($product->get_stock_quantity() == 0) {
$product->set_status('draft'); // Přepne na koncept
$product->save();
}
}
wp_reset_postdata();
}
});


