Problem mit add_rewrite_rule und Paginierung (paged und page query_vars)

7

Ich habe eine benutzerdefinierte Taxonomie mit dem Namen locationund möchte für jeden Begriff Abschnitte wie "Nachrichten" und "Marktplatz" hinzufügen, damit meine URL so aussieht/location/montreal/news/

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 der Speicherort, der Abschnitt und die Seite von query_vars den richtigen Wert erhalten. Beim Versuch, auf eine Seiten-URL wie zuzugreifen, wird jedoch ein 404-Fehler angezeigt /location/montreal/news/page/2. Mir ist auch aufgefallen, dass die pageVariable den Wert hat /2. Ist es möglich, dass ich aus diesem Grund einen 404 nicht gefunden bekomme?

Jede Hilfe wäre sehr dankbar!

Daniel Roch-Lefebvre
quelle
Ich finde, dass mich das Ausarbeiten der Umschreiberegeln überwältigt, wenn ich mich mit hübschen Permalinks (zu vielen Variablen) befasse. Ich neige dazu, eine alte hässliche Abfrage an das Ende anzuhängen und sie einen Tag lang zu nennen.
WraithKenny

Antworten:

1

Ich glaube, Sie könnten die Seite add_rewrite_url zuletzt anrufen, damit sie zuerst überprüft wird. Andernfalls wird die ausgelagerte Version niemals übereinstimmen, da die nicht ausgelagerte Version immer zuerst übereinstimmt. Sollte auch funktionieren, wenn Sie 'top' aus Ihren Argumenten entfernen.

Auf dieser Seite finden Sie auch eine gute Möglichkeit zum Debuggen dieser 404, wenn Sie mit benutzerdefiniertem Umschreiben arbeiten: http://www.dev4press.com/2012/tutorials/wordpress/practical/debug-wordpress-rewrite-rules-matching/

Olivier
quelle
0

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

Es funktionierte für Posts, wenn es nur %postname%/im Permalink-Setup verwendet wurde. Ich hielt das Bit nach der Post - URL zu verlieren , wenn unter Verwendung von /%category%/%postname%/ zB http://me.com/test/post/my-next-bit-that-url-rewrite-should-act-on 301 Umleiten zu halten , http://me.com/test/post/my-next-bit-that-url-rewrite-should-act-on weil des kanonischen Verhaltens von Wordpress

Die folgende Zeile hat dieses Problem gestoppt.

remove_filter('template_redirect', 'redirect_canonical');

Ich denke, es sollte im Kodex vorgeschlagen werden.

GordoF
quelle
Durch das Entfernen werden redirect_canonicalwichtige Funktionen entfernt . Ich würde vorschlagen, es nur mit äußerster Vorsicht und als letztes Mittel zu entfernen.
s_ha_dum