wake-up-neo.net

flexibles Umschreiben von 'Ramble'-URLs mit Wordpress

Ich möchte mit folgender ID auf meinen Beitrag zugreifen:

http: // localhost/archives/17/moot-bla-foo-ramble

Mit anderen Worten, die ID entscheidet, ob alles danach die Schnecke oder etwas anderes sein kann (oder nicht). Ähnlich wie diese Links, die zu derselben Seite führen (viele andere Websites tun dasselbe):

Ich habe versucht, eine Umschreiberegel wie diese oben in meinem .htaccess zu definieren:

RewriteRule ^archives/(\d{1,12})(?:/.*) archives/$1 [NC]

Dies funktioniert fast , d. H. Geht zur richtigen Seite, aber holt mir eine Seite, die dann nicht gefunden wird, weil WordPress PATH_INFO erneut ansieht (ich denke) und angibt, dass $query_string jetzt string attachment=moot-bla-foo-ramble ist.

Ich möchte keine 301-Weiterleitung durchführen.

Mein Favorit oder Kurs, wenn es so etwas in den Permalink-Einstellungen gab: Benutzerdefinierte Struktur

/archives/%post_id%/%wildcard%

Das würde die Wanderung allerdings obligatorisch machen, also noch besser ...

/archives/%post_id%(/%wildcard%)?

wunschdenken, denke ich.

2
Frank Nocke

Sie sollten nicht den htaccess verwenden, sondern die WordPress-APIs

z.B.

function custom_rewrite( $wp_rewrite ) {

    $feed_rules = array(
        'archives/(\d+)(?:/.*)+'    =>  'index.php?p='. $wp_rewrite->preg_index(1)
);

    // ( array merge must be done this way, to ensure new rule comes first )
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
// refresh/flush permalinks in the dashboard if this is changed in any way
add_filter( 'generate_rewrite_rules', 'custom_rewrite' );
2
Tom J Nowell

Im Wesentlichen die gleiche Antwort wie bei @ Tom, jedoch mit dem bereitgestellten add_rewrite_rule Wrapper:

add_action('init','wpse48481_rewrite_rules');
function wpse48481_rewrite_rules(){
    add_rewrite_rule('^archives/([0-9]{1,})/','index.php?p=$matches[1]','top');
}

Dies prüft auf URLs des Formulars:

 http://www.yoursite.com/archives/99/something-else

und interpretiere es als post/page/cpt mit ID = 99. Natürlich kann der Regex sein, was immer Sie wollen ...

1
Stephen Harris

Es tut mir leid zu sagen, aber das alles brachte mich in knietiefe Schwierigkeiten. Plötzlich funktionierten URLs für Tags und Kategorien nicht mehr und es wurde eine leere Suchseite mit dem Titel "Nun, das ist peinlich" angezeigt ...

Sogar ein neutraler, sich nicht ändernder Rückruf, der durch Flush ohne Hinzufügen von Regeln ausgelöst wird, würde Dinge wie */archives/tag/kiwis */archives/categories/fruits beschädigen

Wenn Sie alles entfernen und /wp-admin/options-permalink.php (d. H. Numerische Einstellungen) speichern, wird das Problem erneut behoben. Wiederholt. Sehr verifiziert. Siehe auch diesen Thread bei wordpress.org.

Grundsätzlich habe ich mir für einen Tag einen sehr einfachen Hack ausgedacht, der zu funktionieren scheint. Fügen Sie dies in den .htacces vor dem WordPress-Block hinzu

RewriteRule ^archives/(\d{1,12})(?:/.*) archives/$1 [NC,L]

füge dies in die functions.php meines Themas hinzu. Direkt. Kein Haken.

if ( isset($_SERVER["REDIRECT_URL"]) )
    $_SERVER["REQUEST_URI"] = $_SERVER["REDIRECT_URL"];

Ja, ziemlich schmutzig, schreibe in eine $ _SERVER-Variable. Und voila, alle meine Testfälle funktionieren (einfache URL, URL mit eingebundenem Text, Tags, Kategorie, ...) (Anmerkung: Wenn Ihre Startseite nicht mehr funktioniert (endlose Weiterleitungsschleife)

0
Frank Nocke