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. 🙂
Leave a Reply