Создавая функционал разбиения на страницы для плагина Wordpress столкнулся с небольшой проблемой. Для адресов страниц я использую постоянные ссылки, т.е. вместо
http://mysite.com/index.php?cat=34&id=117
в строке браузера я вижу http://mysite.com/category/bigcargo. Это хорошо для SEO да и читабельность лучше, чем смотреть на вереницу непонятных параметров.
Реализуя вывод товаров в категории, очень захотелось разбить их на страницы, ибо не приятно выводить полотенце из тысяч товаров на одну страницу. Варианта решения я видел 2 - GET параметр в строке адреса и вывод данных через AJAX. Второй вариант интересный, но придется писать JavaScript. Второй вариант казался достаточно простым, его я и выбрал.
Трудности начались буквально сразу - при попытке передать номер страницы через GET параметр я получал очередной адрес с читабельной ссылкой, но никак не вторую страницу. Переменная $_GET была пустая.
Все делается за хука. Единственное - придется пожертвовать читабельной ссылкой, но для начала сойдет.
Первый хук - это объявление нашего параметра, а второй - правило перезаписи для него.
В главный класс плагина добавляем следующее:
Теперь реализация
В итоге, мы получим строку вида http://mysite.com/category/?ls_page=2.
Реализуя вывод товаров в категории, очень захотелось разбить их на страницы, ибо не приятно выводить полотенце из тысяч товаров на одну страницу. Варианта решения я видел 2 - GET параметр в строке адреса и вывод данных через AJAX. Второй вариант интересный, но придется писать JavaScript. Второй вариант казался достаточно простым, его я и выбрал.
Трудности начались буквально сразу - при попытке передать номер страницы через GET параметр я получал очередной адрес с читабельной ссылкой, но никак не вторую страницу. Переменная $_GET была пустая.
Решение
На просторах интернета наверняка есть решения, просто я их не смог найти :)Все делается за хука. Единственное - придется пожертвовать читабельной ссылкой, но для начала сойдет.
Первый хук - это объявление нашего параметра, а второй - правило перезаписи для него.
В главный класс плагина добавляем следующее:
add_filter('query_vars', array(&$this, 'AddQueryVars'));
add_filter('rewrite_rules_array', array(&$this, 'AddRewriteRules'));
Эти 2 фильтра дадут возможность добавить наш параметр и добавить к ему правило перезаписи.Теперь реализация
public function AddQueryVars($aVars)
{
// Добавим имя параметра, который должен отображаться в URL
$aVars[] = 'ls_page';
return $aVars;
}
public function AddRewriteRules($aRules)
{
// Правила для перезаписи URL, что бы наш параметр не менялся
$aNewRules = array('ls_page/([^/]+)/?$' => 'index.php?ls_page=$matches[1]');
$aRules = $aNewRules + $aRules;
return $aRules;
}
В нашем случае, мы не будем перезаписывать параметр, а просто выведем его как GET параметр строки запроса.В итоге, мы получим строку вида http://mysite.com/category/?ls_page=2.
Почему параметр ls_page, а не просто page? Я не разбирался, но параметр с именем page не выводится, т.е. правило перезаписи его не обрабатывает. Наверняка, дело в имени и у самого Wordpress есть такой параметр и, конечно, его правило перезаписи важнее пользовательского.
Комментарии
Отправить комментарий