it-swarm.com.de

Das Einschließen der Kategoriebasis in einen Post-Permalink ergibt 404

Ich habe eine statische Startseite und eine separate Seite /news/ als Beitragsseite. Ich möchte die URLs für einzelne Posts wie folgt haben:

www.example.com/news/categoryname/subcategory/postname/

und für die Kategorie Archive:

www.example.com/news/categoryname/

Was ich schon ausprobiert habe:

  • Wenn ich news als Kategoriebasis und /news/%category%/%postname%/ als benutzerdefinierte Permalink-Struktur hinzufüge, erhalte ich die gewünschten URLs, aber auch 404 error für einzelne Beiträge (sowohl mit als auch ohne news/ in der URL). Alle anderen Seiten (z. B. Kategoriearchive, Seiten usw.) sind zugänglich.

  • Wenn ich category-base leer lasse und permalinks als /news/%category%/%postname%/ bezeichne, gibt es keine 404 Fehler, aber Kategorie-URLs enthalten zusätzlich den Standard-Slug category, wie folgt: www.example.com/news/category/categoryname/

  • Wenn ich Plugins verwende, um die Standardkategoriebasis zu entfernen, oder einfach die Kategoriebasis auf . setze, wird sie zusammen mit dem Teil news entfernt

  • Wenn ich Permalinks als /%category%/%postname%/ einstelle und nur die Kategoriebasis news hinzufüge, gibt es auch keine 404 Fehler, aber Links zu Beiträgen beginnen nicht mit news: www.example.com/categoryname/subcategory/postname/

Es gibt einige ähnliche unbeantwortete Fragen: Posts, die nicht mit benutzerdefinierter Kategoriebasis und Unterkategorien angezeigt werden und WordPress-Permalinks

6
semyonfilippov

Ich bin kürzlich zu diesem Problem zurückgekehrt und habe endlich die Lösung gefunden! Es kann bei Ihnen funktionieren oder auch nicht - es gibt zwei mögliche Fälle:

  1. Wenn einige Beiträge auf Ihrer Website unter geordneten Kategorien platziert werden und einige - in Unterkategorien (Kinder Kategorien), oder die Kategorien unterschiedliche Schachtelungsebenen (einige übergeordneten Kategorien haben nur Unterkategorien während andere - Unter Unterkategorien), dann gibt es keine Lösung . Es ist unmöglich, news/category/post-name/ von news/category/subcategory/ mit Regex in Umschreiberegeln zu unterscheiden.

  2. Wenn Sie für alle Kategorien eine feste Verschachtelungsebene festgelegt haben und nur in den Unterkategorien der letzten Ebene posten, haben Sie Glück! Es gibt eine ganz einfache Lösung :

Der Grund für diese 404-Seiten mit news sowohl in der Kategoriebasis als auch in der benutzerdefinierten Permalink-Struktur ist, dass die interne Umschreiberegel der Kategoriebasis Vorrang vor den Regeln der Permalink-Struktur hat. Also wird news/category/subcategory/postname/ als index.php?category_name=category/subcategory/postname interpretiert und WordPress kann diese Kategorie offensichtlich nicht finden und gibt 404-Seiten zurück.

Dazu müssen Sie der Regelliste eine neue Umschreiberegel hinzufügen. Platzieren Sie diesen Code in Ihrem functions.php oder wo immer Sie es für angebracht halten:

add_action( 'init', 'wpa58471_category_base' );
function wpa58471_category_base() {
    // Remember to flush the rules once manually after you added this code!
    add_rewrite_rule(
        // The regex to match the incoming URL
        'news/([^/]+)/([^/]+)/([^/]+)(/[0-9]+)?/?$',
        // The resulting internal URL
        'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]',
        // Add the rule to the top of the rewrite list
        'top' );
}

und aktualisiere dann die Permalink-Struktur von deiner Seite mit den allgemeinen WordPress-Optionen. Der obige Code ist für die zweistufige Verschachtelung vorgesehen. Wenn Sie eine mehr oder weniger verschachtelte Kategoriestruktur haben, bearbeiten Sie den regulären Ausdruck und die resultierende URL entsprechend.

P.S. danke an die mitwirkenden dieser nützlichen antworten: hilfe mit add_rewrite_rule und tool zur analyse von umschreiberegeln .

3
semyonfilippov

Sie müssen nur "/" hinzufügen. nach Kategoriebasis:

Kategoriebasis: news/. (/. Ist erforderlich, da 404s für die Veröffentlichung verhindert werden).

Das hat bei mir perfekt funktioniert :)

BEARBEITEN: In diesem Feld werden abschließende oder führende Schrägstriche entfernt, sofern Sie nicht das "."

3

Benutzerdefinierte Permalink-Struktur: /media/%category%/%postname%/ Kategoriebasis: .

Funktionierte für mich, WordPress 3.4.1, ohne zugehörige Plugins.

Update: Nun, später ist mir aufgefallen, dass wp_list_categories Links ohne "Medien" in der URL ausgibt. Beiträge sind jedoch mit der gewünschten URL-Struktur zugänglich, und das Kategoriearchiv befindet sich am richtigen Ort. Jetzt möchte ich das Verhalten von wp_list_categories ändern.

0
Lev Eidinov

Ich schreibe lieber einen Kommentar, kann es aber vorerst nicht. Ihr Code funktioniert einwandfrei, aber wenn Sie die RSS-Feeds nach Kategorien nicht aufteilen möchten, sollte er folgendermaßen aussehen:

add_action( 'init', 'wpa58471_category_base' );
function wpa58471_category_base() {
// Remember to flush the rules once manually after you added this code!
    add_rewrite_rule(
    // The regex to match the incoming URL
    'news/([^/]+)/([^/]+)/([^/][^f][^e][^e][^d]+)(/[0-9]+)?/?$', //here my changes to exclude 'feed'
    // The resulting internal URL
    'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]',
    // Add the rule to the top of the rewrite list
    'top' );
}

Trotzdem danke für ein tolles Codebeispiel. :)

0
talonkingvskg