it-swarm.com.de

Wie entferne ich den Begriff "Kategorie" aus der Kategorie-Paginierung?

Zum Beispiel habe ich eine Kategorie /wiki/https://buhehe.de/wiki/

Der Begriff "Kategorie" wurde aus der URL entfernt, siehe jedoch: https://buhehe.de/wiki/page/2

Die zweite Kategorieseite wird nicht angezeigt, es wird jedoch eine zweite Seite angezeigt.

Wo ist das Problem?

6

Warum tritt das Problem bei der Paginierung auf?

Angenommen, Sie haben eine Kategorie mit dem Namen wiki.

Wenn Sie jetzt eine Kategorie-URL haben wie: https://example.com/wiki (anstelle von https://example.com/category/wiki) und eine Seiten- oder Beitrags-URL wie:

https://example.com/a-page
or
https://example.com/category-slug/a-post

WordPress hat wirklich keine Möglichkeit zu wissen, ob https://example.com/wiki/page/2 die zweite Seite einer anderen Seite/eines anderen Posts oder die zweite Seite eines Kategoriearchivs ist (weil wiki sehr wohl ein Seitenbutzen oder page ein Postbutzen unter der Kategorie wiki sein kann).

Dies geschieht speziell, weil WordPress mit /page/2 Teil als eine andere mehrteilige paginierte Seite oder einen anderen Beitrag verwechselt.

Anstatt also die nächsten Seiten Ihres wiki-Kategoriearchivs zu laden, wird WordPress versuchen, einen paginierten Beitrag mit dem Slug page zu laden, und Sie erhalten einen 404-Fehler (Seite nicht gefunden), anstatt die zweite Seite des Kategoriearchivs zu erhalten.

Bevor ich Ihnen die Lösung für dieses Problem gebe, stellen Sie zunächst sicher, dass Sie den richtigen Permalink haben.

So erreichen Sie die erforderliche Kategorie-URL-Struktur:

Die von Ihnen gewünschte URL-Struktur erfordert einige Arbeit. Befolgen Sie die nachstehenden Anweisungen, um die URL-Struktur zu erhalten, sofern Sie dies noch nicht getan haben:

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

Dafür:

  1. Gehen Sie zu: WordPress Admin Panel MenuSettings.
  2. Fügen Sie einen einzelnen Punkt (.) in das Textfeld Category base ein.
  3. Klicken Save Changes Taste.

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

Dafür:

  1. Gehen Sie zu: WordPress Admin Panel MenuSettings.
  2. Wählen Sie Custom Structure und geben Sie /%category%/%postname%/ in das Textfeld Custom Structure ein.
  3. Klicken Save Changes Taste.

Lösen des Kategorie-Paginierungsproblems:

Einige SEO-Plugins haben eine Lösung für dieses Problem. Da dies jedoch ein Kernproblem der URL-Struktur Ihrer Website ist, ist es besser, sich nicht auf SEO-Plugins zu verlassen. Was ist, wenn Sie das SEO-Plugin in Zukunft ändern möchten und das andere Plugin bessere Optionen bietet, aber keine Lösung dafür bereitstellt?

Daher ist es besser, ein einfaches Plugin zu verwenden, das nur dieses eine Problem behebt. Sie können den folgenden CODE verwenden und in Ihrem Plugin-Verzeichnis mit dem Dateinamen category-pagination-fix.php speichern und dann das Plugin mit dem Namen Category Pagination Fix im Administrationsbereich der Site aktivieren:

<?php
/*
Plugin Name:  Category Pagination Fix
Plugin URI:   https://wordpress.stackexchange.com/a/311858/110572
Description:  Fix category pagination
Version:      1.0.0
Author:       Fayaz Ahmed
Author URI:   https://www.fayazmiraz.com/
*/

function wpse311858_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', 'wpse311858_fix_category_pagination' );

Alternative Lösung:

Die obige Lösung funktioniert perfekt mit Paginierung, wenn Sie eine Kategorie-URL haben wie:

https://example.com/category-slug/

und poste URL wie:

https://example.com/category-slug/post-slug

Wenn Sie jedoch eine Unterkategorie-URL wie die folgende haben:

https://example.com/category-slug/sub-category-slug

oder, wenn Sie eine Post-URL haben wie:

https://example.com/post-slug

die obige einfache Lösung funktioniert nicht.

In solchen Fällen können Sie ein Plugin wie Remove Category URL verwenden.

Diese Art von Plugins führen einige grundlegende Änderungen beim Umschreiben von URLs durch. Aus diesem Grund funktioniert das Standardverhalten von WordPress möglicherweise nicht wie erwartet, nachdem Sie eines dieser Plugins verwendet haben. Verwenden Sie also die für Sie am besten geeignete Lösung, aber stellen Sie sicher, dass Sie nicht versuchen, dasselbe in mehreren verschiedenen Plugins zu tun .

Achtung: Verwenden Sie diese Art von kopfloser Archiv-URL (z. B. kein category oder ähnlicher Begriff für Kategorieseitenlinks, kein tag oder ähnlicher Begriff für Tag-Seitenlinks usw.) .) erzeugt interne Konflikte mit Seiten- und Post-URLs. Die WordPress-Engine benötigt viele interne Überprüfungen, um festzustellen, welche geladen werden sollen und welche nicht. Dieser Prozess ist ressourcenhungrig. Wenn Ihre Site also Tausende von Seiten, Posts, Kategorien, Tags usw. enthält, ist es besser, diese Begriffe in der URL zu verwenden.

4
Fayaz

Yoast Plugin - Kategorien entfernen

Sie können ein SEO-Plugin wie Yoast verwenden, das die Option Kategorien entfernen aufweist, oder Sie können die Funktion selbst programmieren, die in einigen der folgenden Links erläutert wird.

Einige verwandte Beiträge, die Ihnen helfen könnten:

Wie Kategorie aus WordPress-URL entfernen?

Kategorie & Tag-Basis aus WordPress-URL entfernen - ohne Plugin

2
Cryptomanic

Hier ist meine Lösung.

Dies funktioniert in meinem Fall auch auf einer paginierten Seite.

Bitte probieren Sie es aus und lassen Sie es mich wissen, wenn es funktioniert.

// Remove category from URL
add_filter('user_trailingslashit', 'wpse311858_remove_category_from_url');
function wpse311858_remove_category_from_url($link) {
  return str_replace("/category/", "/", $link);
}

// Add new category URLs
add_filter('generate_rewrite_rules', 'wpse311858_category_rewrite');
function wpse311858_category_rewrite($wp_rewrite) {
  $new_rules = [];

  // Get all the categories including empty categories
  $cats = get_categories(['exclude' => 1, 'hide_empty' => false ]); //exclude uncategorized catagory if there were 

  // Loop through each category to add new rules to core rewrite pattern
  foreach( $cats as $cat ) {
    $cat_nicename = $cat->slug;

    // Check if it is parent or child category
    if( $cat->parent !== 0 ) {
      $cat_nicename = get_category_parents( $cat->parent, false, '/', true ) . $cat_nicename;
    }

    // For each pattern
    $new_rules['(' . $cat_nicename . ')/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; // for feed pattern
    $new_rules['(' . $cat_nicename . ')/(.+?)/(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; // for another feed pattern
    $new_rules['(' . $cat_nicename . ')/(.+?)/embed/?$'] = 'index.php?category_name=$matches[1]&embed=true'; // for embed page
    $new_rules['(' . $cat_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]'; // for paged page
    $new_rules['(' . $cat_nicename . ')/?$'] = 'index.php?category_name=$matches[1]'; // for category archive page

  } //endforeach

  // Finally add new rules
  $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
0
norixxx