Пользовательский URL-адрес WordPress перезаписывает

У меня есть ссылки на моем сайте, которые передают запросы на страницы, запрашивающие из внешней базы данных. Это прекрасно работает, например

mysite.com/catalog/?tl=flooring 

однако я хочу переписать этот URL-адрес, чтобы он выглядел как

 mysite.com/catalog/flooring 

Ive попытался изменить правила перезаписи в wordpress, но всегда отображает индексную страницу

 add_filter('rewrite_rules_array','wp_insertMyRewriteRules'); add_filter('query_vars','wp_insertMyRewriteQueryVars'); add_filter('init','flushRules'); // Remember to flush_rules() when adding rules function flushRules(){ global $wp_rewrite; $wp_rewrite->flush_rules(); } // Adding a new rule function wp_insertMyRewriteRules($rules) { $newrules = array(); $newrules['(catalog)/([a-zA-Z0-9 ]+)$'] = '/catalog/?tl=$matches[2]'; return $newrules + $rules; } // Adding the id var so that WP recognizes it function wp_insertMyRewriteQueryVars($vars) { array_push($vars, 'id'); return $vars; } 

Solutions Collecting From Web of "Пользовательский URL-адрес WordPress перезаписывает"

Переписать правила в WordPress не так, как вы ожидаете. Все правила перезаписи сопоставляются с обработчиком файлов (почти всегда index.php ), а не с другим URL-адресом.

Вот пример сокращенного кода;

 $rules['catalog/(.*)/?'] = 'index.php?pagename=catalog&tl=$matches[1]'; array_push($query_vars, 'tl'); // note query var should match your query string 

Это будет catalog/whatever от страницы «каталог» в WordPress и передать запрос var 'tl'. Вы можете создать шаблон страницы для «каталога», а затем получить значение «tl», используя get_query_var('tl') .

Также избегайте использования таких запросов, как id – используйте что-то более уникальное (например, «tl»), чтобы избежать столкновений с WordPress.

И не сбрасывайте правила на каждый init! Это плохая практика, и я буду писать на .htaccess и вызывать обновления базы данных при каждой загрузке страницы!

WordPress всегда будет выравнивать постоянные ссылки, когда вы обновляете сообщение или свою структуру permalink (просто обновите свои постоянные ссылки при внесении изменений в свой код).

Эта статья в Raazorlight более подробно описывает процесс захвата запросов и перезаписи URL в WP.

Кроме того, проверьте комментарии там, чтобы узнать, почему вызов flushRules() может не понадобиться, если вы повторно сохраняете постоянные ссылки. При желании, flushRules() можно вызвать только один раз во время обратного вызова активации плагина.

Копаем глубже, комментируя «pmdci» ссылки на поучительную должность / сагу по связанной теме передачи запроса на пользовательский тип сообщения с использованием пользовательской таксономии .