web-dev-qa-db-de.com

Benutzerdefinierte Permalink-Struktur ergibt bei Paginierung den Wert 404

Ich habe ein Permalink-Problem. Zu Ihrer Information, es gibt ein paar verschiedene Kategorien innerhalb einer Website und es gibt viele Beiträge in einer einzigen Kategorie.

Meine Permalink-Einstellung ist:

Benutzerdefinierte Struktur: /%category%/%postname%/

Kategoriebasis:.

Nachdem diese Einstellung gespeichert wurde, lautet meine URL

www.mydomain.com/category-slug-name/

anstatt

www.mydomain.com/category/category-slug-name/

Ich habe eingestellt, dass die Blogseiten höchstens anzeigen: 8 Beiträge unter Einstellung> Lesen . Die Paginierung wird angezeigt, wenn eine Kategorieseite mehr als 8 Beiträge enthält.

Ich klickte auf "Seite 2" und bemerkte, dass www.mydomain.com/category-slug-name/page/2/ mich auf die 404-Fehlerseite brachte.

Ursprünglich lautet die URL einer Kategorie "Seite2" www.mydomain.com/category/category-slug-name/page/2/. Sie funktioniert einwandfrei, wenn die URL eine "Kategorie" als ursprüngliche URL enthält. Sonst wäre es 404 Fehlerseite.

Mein Hauptanliegen ist, dass die Kategorie nicht in der URL angezeigt wird. Ich möchte jedoch, dass der Slug-Name der Kategorie in der URL angezeigt wird, wenn ich den ausgewählten Beitrag betrachte. Und "/ page/2 /" und der Rest wird gut funktionieren.

Hoffentlich wird dieses Problem mit den empfohlenen Plugins nicht behoben. Weil ich nicht möchte, dass die Website zu schwer ist.

Irgendwelche Vorschläge?

5
Jornes

Das ist ganz normales Verhalten. Wenn Sie die Kategoriebasis entfernen möchten, müssen Sie einige benutzerdefinierte Umschreibregeln schreiben, keine einfachen Regeln, die ich sagen muss. Aus meiner Sicht erfordert das Entfernen der Kategoriebasis einen zusätzlichen Job in jeder Anfrage, der wertlos ist, da er weder für die Suchmaschinenoptimierung noch für eine bessere Seitennavigation von Vorteil ist. Einige beliebte Plugins, wie WordPres SEO von Yoast, hatten diese Option in der Vergangenheit und haben sie vor einiger Zeit entfernt. Dies ist aber nur eine Meinung.

Konfiguriere die Kategoriebasis auf . (Punkt), füge diesen Code in die functions.php deines Themas oder besser in ein Plugin ein und lösche die Umschreiberegeln (Code aus diesem Beitrag im Daily Web Kit ):

add_filter( 'category_rewrite_rules', 'vipx_filter_category_rewrite_rules' );
function vipx_filter_category_rewrite_rules( $rules ) {
    $categories = get_categories( array( 'hide_empty' => false ) );

    if ( is_array( $categories ) && ! empty( $categories ) ) {
        $slugs = array();
        foreach ( $categories as $category ) {
            if ( is_object( $category ) && ! is_wp_error( $category ) ) {
                if ( 0 == $category->category_parent ) {
                    $slugs[] = $category->slug;
                } else {
                    $slugs[] = trim( get_category_parents( $category->term_id, false, '/', true ), '/' );
                }
            }
        }

        if ( ! empty( $slugs ) ) {
            $rules = array();

            foreach ( $slugs as $slug ) {
                $rules[ '(' . $slug . ')/feed/(feed|rdf|rss|rss2|atom)?/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
                $rules[ '(' . $slug . ')/(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
                $rules[ '(' . $slug . ')(/page/(\d)+/?)?$' ] = 'index.php?category_name=$matches[1]&paged=$matches[3]';
            }
        }
    }
    return $rules;
}
10
cybmeta

Dies funktionierte für mich, füge diese Funktion in deine functions.php Seite in WordPress ein und diese Funktion wird dein Aussehen verändern:

Zurück: http://www.example.com/advice/category/category_name/page/3/

An: http://www.example.com/advice/category_name/page/3/

function remove_category_slug_url($query_string){ 
    if ($query_string['name'] == 'page' && isset($query_string['page'])) {
        unset($query_string['name']);
        list($delim, $page_index) = explode('/', $query_string['page']);
        $query_string['paged'] = $page_index;
    }      
    return $query_string;
}
add_filter('request', 'remove_category_slug_url');
2
Avinash Shukla
function 
 remove_category_slug_url($query_string){ 
if ($query_string['name'] == 'page' && isset($query_string['page'])) {
    unset($query_string['name']);
    list($delim, $page_index) = split('/', $query_string['page']);
    $query_string['paged'] = $page_index;
}      
return $query_string;
 }
 add_filter('request', 'remove_category_slug_url');

Dies funktionierte für mich, Fügen Sie diesen Funktionscode in Ihrer functions.php in WordPress

hinweis: gehe zu einstellungen-> permalinks und klicke auf "speichern". Dadurch erstellt WordPress die Umschreiberegeln unter Berücksichtigung der neuen Regeln neu

1
ghanshyam v

Für alle anderen, die dieses Problem mit den Weiterleitungen auf paginierten Seiten haben, funktionierte Folgendes für mich:

Ändere in deinen Permalinks: /% category% /% postname% /

zu

/% category% /% postname%

Beachten Sie das Entfernen des abschließenden Schrägstrichs "/".

Rauben

0
robireland

Das hat bei mir funktioniert.

function remove_page_from_query_string($query_string){ 
   if ($query_string['name'] == 'page' && isset($query_string['page'])) {
       unset($query_string['name']);
       // 'page' in the query_string looks like '/2', so i'm spliting it out
      list($delim, $page_index) = split('/', $query_string['page']);
      $query_string['paged'] = $page_index;
   }      
   return $query_string;
} 
add_filter('request', 'remove_page_from_query_string');
0
Jhony Penagos