webentwicklung-frage-antwort-db.com.de

Stellen Sie sicher, dass Post-Slugs Vorrang vor Kategorie-Slugs haben

Ich habe eine WordPress-Site, auf der die Kategoriebasis von der URL gestrippt ist.

Wenn eine Kategorie einen bestimmten Slug hat, der einem Post-Slug ähnelt, wird die Kategorie angezeigt.

Ich möchte stattdessen den Beitrag zeigen. Ist das möglich?

Vielen Dank!

4
bertkat

Es gibt keine saubere Möglichkeit, das zu tun, wonach Sie fragen. Sie möchten, dass WordPress überprüft, ob für eine bestimmte URL ein Beitrag mit diesem Slug vorhanden ist, und wenn nicht, versuchen Sie, eine Kategorie mit diesem Slug zu finden. Mit Ausnahme von Seiten prüft WordPress nicht, ob ein Objekt (Beitrag, Begriff) vorhanden ist, bevor eine übereinstimmende Umschreiberegel "festgeschrieben" wird. Wenn Sie daher widersprüchliche Umschreibregeln haben, wird die zweite Regel niemals gelesen.

Die beste Antwort ist, eine andere Umschreibestruktur für Ihre Posts oder Kategorien zu finden. Präfixe sind ideal, wie /blog/%postname%/, /articles/%postname%/ für Posts oder /category/%category%/, /topic/%category%/ für Kategorien.

Das heißt, es ist nicht unmöglich zu tun, was Sie verlangen, es ist einfach nicht optimal. Sie müssen lediglich die request abfangen und prüfen, ob der Beitrag vorhanden ist. Wenn nicht, ändern Sie die Abfragevariablen. Beachten Sie, dass dies die Seitenlast jedes Posts erhöht. Abwägen Sie also die Kosten gegen die Vorteile. Denken Sie auch daran, dass Sie nicht auf die Kategorie zugreifen können, wenn ein Beitrag und eine Kategorie denselben Namen haben. Ohne weiteres

function wpse_75604_check_rewrite_conflicts( $qv ) {
    if ( isset( $qv['name'] ) ) {
        if ( ! get_page_by_path( $qv['name'], OBJECT, 'post' ) ) {
            $qv['category_name'] = $qv['name'];
            unset( $qv['name'] );
        }
    }
    return $qv;
}
add_filter( 'request', 'wpse_75604_check_rewrite_conflicts' );
0
Matthew Boynes

Ich denke, Sie können die Antwort auf diese Frage verwenden, indem Sie den page_rewrite_rules-Filter durch post_rewrite_rules ersetzen, sodass Regeln für das Umschreiben nach dem Schreiben die höchste Priorität haben.

1
Parham