Snažím se vytvořit strukturu SILO na jednom z mých stránek WordPressu.
Vždy jsem tuto možnost zaškrtnul na Yoast SEO plugin "Strip kategorie base (obvykle/kategorie /) z kategorie URL."
Stránky mé kategorie tak mají tuto adresu URL: sitename.com/Apple/ (kde „Apple“ je stránka kategorie)
Teď chci vytvořit novou "stránku" se stejným slugem, Appleem.
Můžu snadno vytvořit novou stránku „Apple“, ale když přejdu na adresu sitename.com/Apple/, zobrazí se stránka kategorie - místo nově vytvořené stránky.
Moje otázka: Existuje způsob, jak "přepsat" výchozí prioritu kategorie na stránce? Chci zobrazit stránku, protože nad ní budu mít kontrolu - můžu přizpůsobit, přidat další obsah a snadno je měnit (plus stránky mi pomohou lépe strukturovat stránky)
Oceňuji tvojí pomoc!
Jedním z možných řešení je not změnit základnu kategorie a nechat as-is, ale namísto toho změnit jakýkoliv výstup kategorie odkaz na pásmovou bázi kategorie přes filtr. Výsledkem bude samozřejmě 404, pokud jste nevytvořili stránku v místě, kde tyto odkazy odkazují, takže je nutné vytvořit stránku pro každou kategorii.
function wpa_alter_cat_links( $termlink, $term, $taxonomy ){
if( 'category' != $taxonomy ) return $termlink;
return str_replace( '/category', '', $termlink );
}
add_filter( 'term_link', 'wpa_alter_cat_links', 10, 3 );
Pravděpodobně budete chtít tento test důkladně otestovat pro jakékoliv vedlejší účinky, použít na vlastní nebezpečí!
EDITOVAT- měnit pouze kategorie odkazů na nejvyšší úrovni:
function wpa_alter_cat_links( $termlink, $term, $taxonomy ){
if( 'category' == $taxonomy && 0 == $term->parent ){
return str_replace( '/category', '', $termlink );
}
return $termlink;
}
add_filter( 'term_link', 'wpa_alter_cat_links', 10, 3 );
Vytvořil jsem následující, poměrně jednoduchou funkci, aby se stránky při načítání obsahu staly důležitějšími než kategorie.
(Poznámka: toto nemusí být nejlepší, ale jednoduchý způsob. Při použití pluginu Advanced Custom Fields jsem zjistil problém, který nevkládá vlastní pole ani staré ani nové stránky ve výchozím nastavení. Přidání get_queried_object()->ID
jak to druhý parametr ACF get_field()
vyřešil, otestujte jej v prostředí WP.
function loadPageFirst() {
// get the actual category
$actualCategory = get_category( get_query_var('cat') );
// get the page with the same slug
$matchingPage = get_page_by_path( $actualCategory->slug );
// If no match, load the normal listing template and exit (edit if you are using a custom listing template, eg. category.php)
if (!$matchingPage) {
include( get_template_directory() . '/archive.php');
die();
}
// Make a new query with the page's ID and load the page template
query_posts( 'page_id=' . $matchingPage->ID );
include( get_template_directory() . '/page.php');
die();
}
add_filter( 'category_template', 'loadPageFirst' );
Můžete ho zahrnout do funkcí theme.php. To vypadá, že OK s Yoast SEO plugin.
Tam je super jednoduchý a dokonale funkční odpověď zde: https://stackoverflow.com/questions/32310453/make-wordpress-use-the-page-instead-of-category
Pro pytel úplnosti:
Pozadí
Očekávání
Nastavení
Zde je moje nastavení (nevyžaduje žádné další pluginy ani úpravy kódu) Několik nainstalovaných pluginů je WP Rocket a Yoast, na kterých se zaměřím na toto vlákno.
Ovládací panel WP-> Nastavení-> Permalinks
Vyberte "Vlastní struktura" a zadejte /% kategorie% /% postname%/v poli
Na stejné stránce změňte "Kategorie databáze" na jednu tečku. "." (bez uvozovek, jen jedna tečka/perioda/stopka
Mám nainstalovaný Yoast, který jsem si nastavil tak, aby přepsal nastavení permalinků, ale věřím, že to pokazilo můj úkol.
Ovládací panel WP-> SEO-> Pokročilé-> Permalinks (karta)
"Změnit adresy URL -> Oddělit základnu kategorie ..." = Keep
Pak musíte vymazat mezipaměť. Používám WP Rocket pro ukládání do mezipaměti, takže jsem vyprázdnil mezipaměť a vše funguje tak, jak má.
Edit: Ujistěte se, že jste uložili změny po krocích 3 a 5
Závisí. Pokud se pokoušíte nastavit 2 různé stránky se stejnou adresou URL, není to dobrý nápad. Pokud se ale nestaráte o stránky kategorie, můžete je přesměrovat na vaše stránky.
RedirectMatch 301 ^/category/(.*)$ /$1
Tento kód je v souboru .htaccess
a přesměrován/kategorie/stránka na stránku/page /
"WordPress způsobem", jak to udělat, by bylo vytvořit vlastní šablonu php pro vaši stránku kategorie a aplikovat přizpůsobení tam, spíše než vytvořením jedinečné "Stránka".
K dispozici jsou také četné pluginy, které umožňují přidat obrázky a další vlastní pole na stránku archivu kategorií, což může být lepší volba, pokud byste raději neupravovali soubory motivů.
Alternativně bych doporučil přidat kategorii kategorií, která je možná jedním z klíčových klíčových slov
Nejprve stáhněte kategorii v kategorii yoast No-index v kategorii yoast, ale před tím, než bude tato struktura permalinku nastavena jako /% category% /% postname% /