wake-up-neo.com

Problem mit add_rewrite_rule und Paginierung (paged und page query_vars)

Ich habe eine benutzerdefinierte Taxonomie mit dem Namen location und möchte für jeden Begriff Abschnitte wie 'news' und 'marketplace' hinzufügen, sodass meine URL wie /location/montreal/news/ aussieht.

Es funktioniert perfekt, bis ich versuche, Paginierung hinzuzufügen. Hier ist mein Code:

add_action( 'init', 'region_rewrite' );
function region_rewrite()
{
    global $wp;
    $wp->add_query_var( 'section' );

    add_rewrite_rule(
      '^location/([^/]*)/([^/]*)/page/([0-9]+)/?',
      'index.php?location=$matches[1]&section=$matches[2]&paged=$matches[3]',
      'top'
    );
    add_rewrite_rule(
      '^location/([^/]*)/([^/]*)/?',
      'index.php?location=$matches[1]&section=$matches[2]',
      'top'
    );
}

Ich verwende das Rewrite Analyzer Plugin und es scheint, dass die Position, der Abschnitt und die Seite von query_vars mit dem richtigen Wert belegt sind. Beim Versuch, auf eine Seiten-URL wie /location/montreal/news/page/2 zuzugreifen, wird jedoch eine 404-Fehlermeldung angezeigt. Mir ist auch aufgefallen, dass die Variable page den Wert /2 hat. Ist es möglich, dass ich aus diesem Grund einen 404 nicht gefunden bekomme?

Jede Hilfe wäre sehr dankbar!

Ich glaube, Sie könnten einfach den ausgelagerten add_rewrite_url last aufrufen, damit er zuerst überprüft wird. Andernfalls wird die ausgelagerte Version niemals eine Übereinstimmung erhalten, da die nicht ausgelagerte Version immer zuerst übereinstimmt. Sollte auch funktionieren, wenn Sie 'top' aus Ihren Argumenten entfernen.

Schauen Sie sich auch diese Seite an, um herauszufinden, wie Sie Fehler in 404 beheben können, wenn Sie mit benutzerdefiniertem Umschreiben arbeiten: http://www.dev4press.com/2012/tutorials/wordpress/practical/debug-wordpress-rewrite-rules-matching/

1
Olivier

Danke an Olivier. Mein eigenes Problem war, dass mein add_rewrite_url gut für Seiten, aber nicht für alle Beiträge funktioniert hat.

Es funktionierte für Posts, wenn im Permalink-Setup nur %postname%/ verwendet wurde. Ich habe das Bit nach der Post-URL immer wieder verloren, wenn ich /%category%/%postname%/ verwendet habe, d. H., http://me.com/test/post/my-next-bit-that-url-rewrite-should-act-on wurde wegen des kanonischen Verhaltens von WordPress weiterhin auf http://me.com/test/post/my-next-bit-that-url-rewrite-should-act-on umgeleitet

Die folgende Zeile hat dieses Problem behoben.

remove_filter('template_redirect', 'redirect_canonical');

Ich denke, es sollte im Kodex vorgeschlagen werden.

0
GordoF