2016-03-17 3 views
1

Я использовал add_rewrite_rule, чтобы перенаправить хороший URL-адрес на правильную страницу. Это правило:add_rewrite_url получить параметры пустые

add_rewrite_rule('^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?','index.php?pagename=auto&id=1234', 'top'); 

Так что, если я иду к следующему URL-адресу: website.com/cars/brand/model/car/1234 Это Виль перейти на страницу с Pagename авто.

На этой странице есть короткий код, который должен получить этот идентификатор. Если я повторяю $ _GET ['pagename'], он печатает 'auto'. Но если я печатаю $ _GET ['id'], он ничего не содержит. Почему я не могу получить это значение в коротком коде?

Это правило работает отлично:

add_rewrite_rule('^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?','index.php?pagename=auto&id=' . $_GET['id'], 'top'); 

Но я хочу что-то вроде этого:

add_rewrite_rule('^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?','index.php?pagename=auto&id=$matches[5]', 'top'); 

Я не знаю, почему $ соответствует пустой.

Полный код:

function redirectUrls() { 
    flush_rewrite_rules(); 
    add_rewrite_rule('^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?','index.php?pagename=auto&id=1234', 'top'); 
} 
add_action('init', 'redirectUrls'); 

Я ставлю этот код в моем плагине

EDIT (ОТВЕТ) Оке Я использовал этот учебник, и она работает: http://www.janes.co.za/wordpress-permalinks-and-custom-_get-variables/

Я также использовал ответ @Sacroma

function add_query_vars($aVars) { 
    $aVars[] = "id"; // represents the name of the product category as shown in the URL 
    return $aVars; 
} 
add_filter('query_vars', 'add_query_vars'); 

function add_rewrite_rules($aRules) { 
    $aNewRules = array('^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/?$' => 'index.php?pagename=auto&id=$matches[5]'); 
    $aRules = $aNewRules + $aRules; 
    return $aRules; 
} 

add_filter('rewrite_rules_array', 'add_rewrite_rules'); 

Теперь я могу использовать get_query_var («id»)

+0

Гадание это просто для тестирования, но не забудьте удалить flush_rewrite_rules() в производстве. – Sarcoma

+1

Нужны ли первые четыре выражения регулярного выражения? Если вы ничего не согласны, они должны быть статическими. * ie * 'add_rewrite_rule ('^ cars/brand/model/car/([^ /] *) /?', 'index.php? pagename = auto & id = $ matches []', 'top');' иначе вы может буквально вводить что-либо в этих пространствах, чтобы соответствовать правилу перезаписи. – Sarcoma

+0

Я знаю. Пока все в порядке. Он находится в плагине. поэтому вы не знаете, как будет вызываться эта страница. теперь это могут быть случаи/bmw/x1/bmwx1/1234, но это также могут быть автомобили/audi/a3/4212 –

ответ

2

Я думаю, что вы ищете get_query_var("id"), он извлекает параметр GET из симпатичного URL-адреса.

См. Код для получения более подробной информации.

https://codex.wordpress.org/Function_Reference/get_query_var

+0

Это не сработало. Но я нашел что-то, чтобы заставить это работать. Спасибо –

+0

Проблема заключалась в том, что wordpress не распознал тег id, потому что он не был зарегистрирован. Вы должны использовать 'add_rewrite_tag()' для любых незарегистрированных тегов перезаписи, которые вы хотите использовать в URL-адресе. https://codex.wordpress.org/Rewrite_API/add_rewrite_tag – Sarcoma

+0

Я бы назвал его car_id, а не id, просто чтобы убедиться, что он не конфликтует с другими тегами. – Sarcoma

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