Změna odkazu kategorie produktu ve Woocommerce

Úno 7, 2024 | WooCommerce

Pokud máte e-shop a běží na Woocommerce možná používáte i nějaké ty kategorie produktů. Kategorie si můžete nechat někde vypsat, včetně náhledových obrázků a usnadnit tak potencionálnímu zákazníkovi nákupní cestu. Na e-shopu www.kytkyodpotoka.cz je na homepage tento seznam kategorií.

Woocommerce kategorie produktů

Časem pro Svatby vznikla samostatná stránka svatby.kytkyodpotoka.cz takže už nebylo žádoucí aby odkaz vedl do kategorie zboží Svatby.

Woocommerce hooky na odkaz pro kategorii produktu

O vykreslení HTML značky pro odkaz u kategorie produktu se stará tato funkce.

function woocommerce_template_loop_category_link_open($category) {
    $category_term = get_term($category, 'product_cat');
    $category_name = (!$category_term || is_wp_error($category_term)) ? '' : $category_term->name;
    /* translators: %s: Category name */
    echo '<a aria-label="' . sprintf(esc_attr__('Visit product category %1$s', 'woocommerce'), esc_attr($category_name)) . '" href="' . esc_url(get_term_link($category, 'product_cat')) . '">';
}

Ta je napojená na tuto akci.

/**
 * The woocommerce_before_subcategory hook.
 *
 * @hooked woocommerce_template_loop_category_link_open - 10
 */
do_action('woocommerce_before_subcategory', $category);

Bohužel funkce woocommerce_template_loop_category_link_open neobsahuje žádný filtr na manipulaci s adresou. Takže řešením bylo tuto funkci odebrat, upravit a znovu přidat. Celý kód, který se stará o změnu url v odkazu vidíte níže.

remove_action('woocommerce_before_subcategory', 'woocommerce_template_loop_category_link_open', 10);
add_action('woocommerce_before_subcategory', 'lh_woocommerce_template_loop_category_link_open', 10, 1);

function lh_woocommerce_template_loop_category_link_open($category) {
    $category_term = get_term($category, 'product_cat');
    $category_name = (!$category_term || is_wp_error($category_term)) ? '' : $category_term->name;
    $link = get_term_link($category, 'product_cat');
    $target = '';
    if ($category->slug == 'svatby') {
        $link = 'https://svatby.kytkyodpotoka.cz/';
        $target = '_blank';
    }

    echo '<a target="' . $target . '" aria-label="' . sprintf(esc_attr__('Visit product category %1$s', 'woocommerce'), esc_attr($category_name)) . '" href="' . esc_url($link) . '">';
}

Nejprve odebírám původní funkci pomocí remove_action a poté pomocí add_action přidávám na její místo novou funkci (respektive upravenou původní). Ta se liší podmínkou, že pokud je kategorie svatby, url se změní na https://svatby.kytkyodpotoka.cz/. Jako bonus přidávám pomocí proměnné $target aby se odkaz otevřel v nové záložce. Kód přidejte do souboru functions.php vaší aktivní child šablony, případně pomocí pluginu pro přidávání snippetů do WordPress.