2010-07-22 4 views
1

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

mysite.com/catalog/?tl=flooring 

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

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; 
} 

ответ

7

правила перезаписи в 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 странице «Каталог», и передать вар запроса «ТЛ». Вы можете создать шаблон страницы для «каталога», а затем получить значение «tl», используя get_query_var('tl').

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

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

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

+0

Можно ли перенаправить на дочернюю страницу? Я поместил почтовое имя в pagename, но на самом деле перенаправляет страницу. –

+3

Если это дочерняя страница, 'pagename' должен быть пустым ** path ** - например' pagename = parentname/childname' – TheDeadMedic

2

This article over at Raazorlight более подробно описывает процесс захвата квестов и перезаписи URL в WP.

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

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

Смежные вопросы