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ů](https://www.hilgert.cz/wp-content/uploads/2024/02/kategorie-1024x701.png)
Č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.