Jak zprovoznit drobečkovou navigaci u vlastních příspěvků s ACF a RankMath SEO

Dlouhou dobu jsem si lámal hlavu s tím, jak zprovoznit vlastní typ příspěvků, které mají taxonomie a zároveň toto vše správně hierarchicky propisovat do drobečkové navigace díky RankMath SEO. Nyní konečně přicházím s přesným návodem, tak snad pomůže. 🙂

V čem je problém?

Hlavní problém je v tom, že na stránce příspěvku se propisuje jak archiv (vlastní typ příspěvků), tak i jeho taxonomie (kategorie). Jenže když se přejde na stránku jednotlivé kategorie, tak kořenový název archivu zmizí. K vyřešení tohoto problému by vám měl pomoci tento návod.

Postup

Berme v potaz, že máte nainstalovaný ACF spolu s RankMath SEO.

V ACF vytvořte nový typ obsahu, například „Projekty“ a nastavte na první straně hierarchické. Následně dejte pokročilá konfigurace a aktivujte archiv.

Následně vytvořte v ACF taxonomii, například „Kategorie projektů“. ZDE VŠAK POZOR! Později již nesmíte změnit slug, který se vám často vygeneruje sám. Pakliže změníte slug, tak se kategorie v této taxonomii přemažou a budete to muset u všech článků znovu vše napárovat.

Jinak opět nastavit na Hierarchické a u typu obsahu vyplňte, na jaký custom post typ (CPT) se to má aplikovat. Je dobré jít pak ještě zpět do „Typy obsahu“ a tam propárovat tuto taxonomii, je to na stejném místě.

Následně jděte do nastavení RankMath SEO a v obecném nastavení přejděte na drobečkovou navigaci, dole pak zaklikněte tyto dvě možnosti.

Následně v RankMath SEO klikněte na nastavení Tituly a metadata. V levém menu pod typem příspěvků najděte váš nově vytvořený CPT, v mém případě „projekty“ a úplně dole nastavte Primární taxonomii na tu, kterou jste si vytvořili.

Následně vložte do functions.php nebo do pluginu na snippety následující kod:

add_filter( 'rank_math/frontend/breadcrumb/items', function( $crumbs, $class ) {
    $archiv = ['Projekty', '/projekty/'];
    
    if (get_post_type() == 'projekty') { // Zde si přepište slug svého CTP
    
        $already_exists = false;
        foreach ($crumbs as $crumb) {
            if ($crumb[0] === 'Projekty') {  // Zde si přepiště název CTP
                $already_exists = true;
                break;
            }
        }

        if (!$already_exists) {
            array_splice($crumbs, 1, 0, array($archiv));
        }
    }

    return $crumbs;
}, 10, 2);

Tento kód ověří, zda se na stránce již v drobečkové navigaci neobjevuje slovo „Projekty“. Pokud ano, tak se kód nespustí. Pokud slovo Projekty v drobečkové navigaci chybí, tak se přidá. Zde je nutné si v kódu dle poznámek upravit proměnné, jako je „(get_post_type() == ‚projekty‘)“ a pak if ($crumb[0] === ‚Projekty‘)

Nyní je hotovo a vše by mělo správně fungovat. Kdyby náhodou ne, neváhejte mě kontaktovat, rád vám s tím pomohu. 🙂

EDIT: Pokud používáte WooCommerce, tak pravděpodobně narazíte na totožný problém. Založíte stránku obchodu, tu napárujete ve Woo a jak poté dostat do drobečkové navigace před názvy kategorií například stránku obchodu „Produkty“? Stačí přidat tento kod. V kodu si pak musíte upravit slovo „produkty“ pokud se vaše stránka obchodu jmenuje jinak.

add_filter( 'rank_math/frontend/breadcrumb/items', function( $crumbs, $class ) {
    $products_page = ['Produkty', '/produkty/']; // Odkaz na stránku s produkty
    
    // Kontrola, zda se nacházíme na stránce produktu nebo kategorii produktů
    if (is_product() || is_product_category()) {

        $already_exists = false;
        foreach ($crumbs as $crumb) {
            if ($crumb[0] === 'Produkty') {
                $already_exists = true;
                break;
            }
        }

        if (!$already_exists) {
            // Přidáme "Produkty" na druhé místo v drobečkové navigaci
            array_splice($crumbs, 1, 0, array($products_page));
        }
    }

    return $crumbs;
}, 10, 2);

Zde je případně ještě kód pro situaci, kdy máte vytvořenou taxonomii (já tvořil web pro klienta, kde byly štítky k jednotlivým CPT) a potřebujete zprovoznit drobečkovou navigaci.

add_filter( 'rank_math/frontend/breadcrumb/items', function( $crumbs, $class ) {
    if ( is_tax( 'people_tags' ) ) { // Kontrola, zda jsme na stránce taxonomie 'people_tags'
        $custom_page = ['Vlastní stránka', '/vlastni-stranka/']; // Upravit podle potřeby
        
        // Vložíme odkaz na druhou pozici v navigaci
        array_splice( $crumbs, 1, 0, array( $custom_page ) );
    }

    return $crumbs;
}, 10, 2 );
1200 800 Adam Pražan

Adam Pražan

Tvořím weby, reklamy a dělám komplexní marketing. Specializuji se na menší lokální projekty, kterým pomáhám od A do Z. Podniká se semnou dobře. Jsem přátelský, zodpovědný, samostatný a držím dohodnutou cenu.

All stories by : Adam Pražan

Leave a Reply