Не получается настроить add_rewrite_rule() - WordPress

292
27 мая 2017, 19:21

У меня есть вот такой url http://nightlifer.new-norm.pro/test/apiBaseClass/getHeaders/?id="3,5"&page=1.

Хочу чтобы запрос обрабатывался в вот таком виде http://nightlifer.new-norm.pro/test/?apiBaseClass.getHeaders={"id":[3,5],"page":1}.

Пробовал вот так:

add_action('init', 'do_rewrite');
function do_rewrite(){
    add_rewrite_rule( '^test/([^/]*)/([^/]*)/?id=$ids&page=$page', 'test/?$matches[1].$matches[2]={"id":$ids,"page":$page}', 'top' );  
}

В итоге у меня ничего не вышло...

Answer 1

1) Строка (http://nightlifer.new-norm.pro/test/apiBaseClass/getHeaders/?id="3,5"&page=1) не начинается со слово 'test' а в синтаксисе регулярных выражений знак ^ означает начало строки, то есть искомое выражение должно было находиться в начале строки.

2) Всегда в регулярных выражениях надо Экранировать специальные символы, то есть

`^test/([^/]*)/([^/]*)` надо заменить на `^test\/([^\/]*)\/([^\/]*)`

Пример отдельной экранировки символа в регулярном вырожении / -> \/ То есть обратный слеш выводит следующий символ так как он есть и он не применяется как специальный символ.

Решение вашего вопроса:

function do_rewrite(){
    add_rewrite_rule( '\/test\/([^\/]*)\/([^\/]*)\/?id=$ids&page=$page', 'test/?$matches[1].$matches[2]={"id":$ids,"page":$page}', 'top' );  
}

Регулярка работает по следующему принцыпу:

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

RegExr: Обучение, сборка и тестирование RegEx

Удачи!

READ ALSO
Поле ввода input на php

Поле ввода input на php

Всем приветУ меня есть поле ввода от 0 до 10, как мне сделать так, что бы в данном поле по умолчанию всегда стояла цифра 0?

250
Bitrix добавить колонку в таблицу БД

Bitrix добавить колонку в таблицу БД

Всем приветЕсть таблица, а в ней есть колонки и значения

448
Как вывести массив из массива?

Как вывести массив из массива?

Есть массив вида:

230