Компьютеры Программирование Собственный Rewriterule в Wordpress

Собственный Rewriterule в Wordpress

Собственный Rewriterule в Wordpress

Один раз я столкнулся с казалось бы простой задачей - сделать сайт на wordpress, одна из страниц которого может принимать параметры, в зависимости от которых генерируется содержимое. Я был уверен, что обычный .htaccess решит мои проблемы, но всё оказалось намного сложнее.

Итак вот каков реализуемый алгоритм. На wordpress ставится плагин exec-php - данный плагин позволяет прямо в тексте страницы воспользоваться кодом на php, что зачастую бывает довольно удобно.

Итак, пусть мы хотим, чтобы этой страничке (mypage) можно было передать, к примеру, название животного, а страничка поищет в базе картинку с таким животным. Будь это самодельный сайт - url бы вглядел как-то http://site.ru/mypage/?animal=slon. Для красоты можно привести ссылку к виду http://site.ru/mypage/slon.html - для этого можно сделать rewriterule в htaccess.

Я так и собирался поступить, но wordpress не позволил вступить в силу изменениям в файле htaccess. Если в wordpress делать реврайт на существующую страницу html, которую можно создать и положить в какую-нибудь папку - то проблем нет, но он отказывается делать реврайт из htaccess на страницу, которая создавалась wordpress и url которой формируется лично вордпресом. (обратите внимание, что в файле htaccess wordpress не хранит свои rewrite - они спрятаны в базе). К слову, мне удалось прописать в htaccess нужный реврайт, но он почему-то делал редирект и красивой ссылки я не получал.

Решение

Короче говоря, нужен способ добавления в wordpress своего rewriterule. Вот необходимые шаги:

  • Заходим в файл functions.php, который хранится в папке с вашей темой.
  • Вставляем в его начало следующий код
    function addMyRewrite() {
        add_rewrite_tag('%animal%', '([^&]+)');
        add_rewrite_rule('mypage/([a-zA-Z-_]+)\.html?$', 'index.php?page_id=11&animal=$matches[1]', 'top');
     
        //flush_rewrite_rules();
    }
    add_action('init', 'addMyRewrite');
    
  • Если мы хотим узнать, какое значение было передано в названии животного - на странице (требуется установленный плагин "Allow PHP in Posts and Pages", про этот плагин написано в обзоре полезных wordpress плагинов), вставляем код
    global $wp_query;
    echo $wp_query->query_vars['animal'];
    

Теперь объясню, что тут происходит. Функция addMyRewrite создает нужное нам правило и добавляет новый для wordpress параметр (тег) - в нашем случае animal - в простивном случае, его просто нельзя будет получить из запроса. В page_id=11 вы подставляете id созданной страницы (той, на которой будет echo $wp_query->query_vars['animal'];)

p.s. данный метод, возможно, не является наилучшим, но он рабочий. Я рекомендую к прочтению данную статью - в ней всё расписано лучше и подробнее.

 

Случайная новость

Чётвёртая производная синуса и косинуса

Вообще говоря, вычисление производной - чисто математическая штука, однако иногда подобный пример на вычисление чётвёртой производной синуса или косинуса удобно с интересной целью дать человеку. С какой? Читайте дальше.

Подробнее ...

Материал о ПК

Одна из первых реклам в СССР - Вентиляторы

Одна из первых реклам в СССР - реклама московского вентиляторного завода, выпускающего промышленные вентиляторы вызывает ностальгию по временам советского телевидения.

Подробнее ...


Нажимай!

Кто на сайте

Сейчас 3 гостей онлайн

Голосуй

Используете ли вы плёнку на сенсорных экранах?
 

Valid XHTML 1.0 Transitional Читать в Яндекс.Ленте