it-swarm-eu.dev

Duplicitní kategorie a adresa URL stránky načte kategorii místo stránky

Vytvořil jsem kategorii se slug service, která má permalink: https://example.com/service.

a stránku s odkazem: https://example.com/service.

V kategorii service je příspěvek s odkazem: https://example.com/service/post1

Nyní je odkaz https://example.com/service přesměrován na archiv kategorie, ale místo toho chci, aby stránku načetl.

Jak to mohu udělat?

2
Thien Sư

Načíst Page, když Page a Category archiv mají stejnou adresu URL:

Toto je výchozí chování aplikace WordPress : Pokud máte stejnou adresu URL pro archiv kategorie a pro stránku , WordPress načte stránku místo archivu kategorie.

Takže pokud nemáte plugin, který mění toto chování pro vaše nastavení WordPress, vaše duplicitní adresa URL by měla načíst stránku, nikoli archiv kategorie.

Pro dosažení správné struktury URL:

Struktura URL, kterou jste chtěli, potřebuje nějakou práci. Pokud jste tak již neučinili, postupujte podle níže uvedených pokynů pro dosažení uvedené struktury adres URL:

# URL structure for Pages:
https://example.com/page-slug

To se děje ve výchozím nastavení, nemusíte nic dělat.


# URL structure for Categories
https://example.com/category-slug

Pro tohle:

  1. Přejděte na: WordPress Admin Panel MenuSettings.
  2. Do textového pole . vložte jednu tečku (Category base).
  3. Klikněte na Save Changes tlačítko.

# URL structure for Posts
https://example.com/category-slug/post-slug

Pro tohle:

  1. Přejděte na: WordPress Admin Panel MenuSettings.
  2. Vyberte Custom Structure a zadejte /%category%/%postname%/ do textového pole Custom Structure.
  3. Klikněte na Save Changes tlačítko.

Pokud z nějakého důvodu nedostanete očekávaný výsledek z tohoto, pak použijte tuto strukturu URL v instalaci WordPress s:

  1. WordPress Core aktualizován na nejnovější verzi.
  2. Není aktivován plugin
  3. Je aktivováno výchozí téma jako Twentyseventeen

a poté zjistěte, co se stane s duplicitní adresou URL stránky a kategorie.

Řešení problému s stránkováním kategorie:

Pokud zkontrolujete tento příspěvek uvidíte, že tento typ struktury URL způsobí nějaký problém s stránkováním v archivních stránkách vaší kategorie. To se děje proto, že WordPress zaměňuje s /page/2 část za jinou stránku nebo příspěvek.

Například: řekněte, že máte kategorii s názvem service a service kategorie má příspěvky jako web development, hosting atd. S následující adresou URL:

https://example.com/service
https://example.com/service/web-development
https://example.com/service/hosting

Nyní můžete mít více stránek ve vaší service stránce kategorie argive, jako například:

https://example.com/service
https://example.com/service/page/2
https://example.com/service/page/3

Vzhledem k této struktuře URL si WordPress myslí, že se pokoušíte načíst příspěvek , který má slug post v kategorii service a tento příspěvek je stránkovaný příspěvek .

Namísto načtení dalších stránek vašeho archivu service se WordPress pokusí načíst stránkovaný příspěvek se slug page a místo toho dostanete chybu 404 (stránka nenalezena).

Chcete-li to vyřešit, můžete použít jednoduchý plugin s následujícím kódem:

<?php
/*
Plugin Name:  Category Pagination Fix
Plugin URI:   https://wordpress.stackexchange.com/a/308826/110572
Description:  Fix category pagination for possible conflicts with page or post url
Version:      1.0.0
Author:       Fayaz Ahmed
Author URI:   https://www.fayazmiraz.com/
*/

function wpse308326_fix_category_pagination( $query_string = array() )
{
    if( isset( $query_string['category_name'] )
            && isset( $query_string['name'] ) && $query_string['name'] == 'page'
            && isset( $query_string['page'] ) ) {
        $paged = trim( $query_string['page'], '/' );
        if( is_numeric( $paged ) ) {
            // we are not allowing 'page' as a page or post slug 
            unset( $query_string['name'] );
            unset( $query_string['page'] )  ;

            // for a category archive, proper pagination query string  is 'paged'
            $query_string['paged'] = ( int ) $paged;
        }
    }   
    return $query_string;
}
add_filter( 'request', 'wpse308326_fix_category_pagination' );
0
Fayaz