Я использовал 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»)
Гадание это просто для тестирования, но не забудьте удалить flush_rewrite_rules() в производстве. – Sarcoma
Нужны ли первые четыре выражения регулярного выражения? Если вы ничего не согласны, они должны быть статическими. * ie * 'add_rewrite_rule ('^ cars/brand/model/car/([^ /] *) /?', 'index.php? pagename = auto & id = $ matches []', 'top');' иначе вы может буквально вводить что-либо в этих пространствах, чтобы соответствовать правилу перезаписи. – Sarcoma
Я знаю. Пока все в порядке. Он находится в плагине. поэтому вы не знаете, как будет вызываться эта страница. теперь это могут быть случаи/bmw/x1/bmwx1/1234, но это также могут быть автомобили/audi/a3/4212 –