Fitness centrum Trutnov Trifit Gym and Club

Jak přepnout vyprodané produkty do konceptu ve WooCommerce?

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 pluginCode Snippets„)

Řešení: Automatické přepnutí produktů na koncept pomocí jednoduchého snippetu

  1. Otevřete administraci WordPressu a přejděte do záložky Vzhled > Editor souboru šablony > functions.php 
  2. 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();
    }
});