it-swarm-eu.dev

Vynutit Wordpress zobrazit stránky namísto kategorie

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!

4
Sid

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 );
5
Milo

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.

2
bencergazda

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í

  • example.com je doména
  • Mám stránku WP nazvanou "foobar" s obsahem
  • Mám kategorii příspěvků WP nazvanou "foobar"
  • Mám WPpost s názvem "zábavné věci s foobary" a kategorie je nastavena na "foobar"

Očekávání

  • Když jdu na adresu example.com/foobar, chci vidět stránku o foobars, nikoli stránku WP, která zobrazuje všechny příspěvky blogu s touto kategorií.
  • Když jdu do blogu o zábavných věcech, URL je example.com/foobar/fun-things-to-do-with-foobars/

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.

  1. Ovládací panel WP-> Nastavení-> Permalinks

  2. Vyberte "Vlastní struktura" a zadejte /% kategorie% /% postname%/v poli

  3. 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.

  1. Ovládací panel WP-> SEO-> Pokročilé-> Permalinks (karta)

  2. "Změnit adresy URL -> Oddělit základnu kategorie ..." = Keep

  3. 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

1
Paul Woods

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 /

0
JMau

"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

0
qccreative

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% /

0
Vale