Перепишите URL с '' или '(' ')' как литералы

Попытка сопоставить и URL-адрес, подобный этому

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

В .htaccess я могу правильно сопоставлять и извлекать все группы

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

в add_rewrite_rule Я не могу сделать это совпадением. Я попытался убежать от [ с \\[ , \\\\[ , \\\\\\\\[

и ничего не работает. Я также пробовал \Q[\E и использовал его как \x5b \091 и ничего не работает. Также попытался ([^\\[]+) совместить не [ символы до [

Каков правильный способ сопоставления метасимволов? Делает то же самое для literal \()

Solutions Collecting From Web of "Перепишите URL с '' или '(' ')' как литералы"

Я обнаружил, что это одна из наиболее плохо документированных функций WordPress, так что, надеюсь, это будет на ходу или будет исправлено кем-то более свободно в WP_Rewrite.

Основной смысл таков:

  1. Во время активации плагинов и правил покраски убедитесь, что ваше пользовательское правило добавлено в список.
  2. Во время init используйте add_rewrite_tag() для любых настраиваемых параметров строки запроса, которые находятся в правиле. Для назначения index.php?this_is_custom=$matches[1] вы должны добавить тег this_is_custom .
 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' ); 

Ваш пример немного освещен в коде, особенно в URL-адресе, который вы пытаетесь сопоставить (что все эти параметры соответствуют?), Поэтому мой ответ несколько общий.