Rewrite der URL mit ” oder ‘(‘ ‘)’ als Literale

Versuchen Sie, Übereinstimmung und URL wie folgt zu finden

linktosite/alphaNum/123/321/alphanum[alphanum].jpg 

In .htaccess kann ich alle Gruppen richtig zuordnen und extrahieren

 linktosite/(.+)/([0-9]+)/([0-9]+)/(.+)\\[(.+)\\]\\.(.+)$ 

in add_rewrite_rule kann ich es nicht zusammenbringen. Ich habe versucht, die [ mit \\[ , \\\\[ , \\\\[

und nichts funktioniert. Ich habe auch versucht \Q[\E und benutze es als \x5b \091 und nichts funktioniert. Auch versucht ([^\\[]+) , um nicht [ Zeichen bis zu [

Was ist der richtige Weg, um Metazeichen wie diese zu vergleichen? Gleiches gilt für literal \()

Solutions Collecting From Web of "Rewrite der URL mit ” oder ‘(‘ ‘)’ als Literale"

Ich habe festgestellt, dass dies eines der schlechter dokumentierten Features von WordPress ist. Hoffentlich ist dies auf dem richtigen Weg oder wird von jemandem korrigiert, der in WP_Rewrite fliessender ist.

Der grundlegende core ist also:

  1. Stellen Sie bei der Aktivierung von Plugins und beim Löschen von Regeln sicher, dass die benutzerdefinierte Regel zur Liste hinzugefügt wird.
  2. Verwenden add_rewrite_tag() während der add_rewrite_tag() für alle benutzerdefinierten add_rewrite_tag() , die in der Regel enthalten sind. Für ein Ziel von index.php?this_is_custom=$matches[1] müssen Sie das this_is_custom Tag hinzufügen.
 function wpse_39626_init() { // these must be added during init. if you haven't done // add_rewrite_tag() for all custom query string vars, // wordpress will ignore them. add_rewrite_tag( '%wpse_thing%', '(\w+)' ); add_rewrite_tag( '%wpse_name%', '(\w+)' ); add_rewrite_tag( '%wpse_index%', '(\w+)' ); // manually flushing rules so this code is easier to demo. // under normal circumstances you would use the plugin // activation hook. this will eventually call wpse_39626_rules(). flush_rewrite_rules(); } add_action( 'init', 'wpse_39626_init' ); // Normally, this would get called during something like // your plugin's activation hook. See register_activation_hook(). function wpse_39626_activate() { add_rewrite_rule( 'testing/(\w+)\[(\w+)\]', 'index.php?wpse_thing=custom&wpse_name=$matches[1]&wpse_index=$matches[2]', 'top' ); flush_rewrite_rules(); } //register_activation_hook( __FILE__, 'wpse_39626_activate' ); // Hook into rewrite_rules_array, in case rewrite rules // are flushed after the plugin is activated. function wpse_39626_rules( $rules ) { $new_rules = array(); // Matches: testing/outer[inner] // wpse_name = outer // wpse_index = inner $new_rules['testing/(\w+)\[(\w+)\]'] = 'index.php?wpse_thing=custom&wpse_name=$matches[1]&wpse_index=$matches[2]'; // prepend and return rules return $new_rules + $rules; } add_action( 'rewrite_rules_array', 'wpse_39626_rules' ); // Here's some demo code to intercept the page load // and do custom functionality when our rewrite rule // matches. (We'll just dump the matched values.) function wpse_39626_posts( $query ) { if( ! is_main_query( $query ) ) { return; } if( $query->get('wpse_thing') != 'custom' ) { return; } var_dump( $query->get('wpse_name') ); var_dump( $query->get('wpse_index') ); die; } add_action( 'pre_get_posts', 'wpse_39626_posts' ); 

Ihr Beispiel ist ein wenig Licht auf Code, insbesondere in der URL, die Sie versuchen zu entsprechen (was alle diese Parameter entsprechen?), So dass meine Antwort etwas generisch ist.