Поддержка Проблемы и решения ModRewrite УРЛа вне обработки вордпрессом

  • Здраствуйте.

    У меня идет скрещивание вордпресса и своей системы статистики (mySQL) для того, чтобы страничка с текстом (вордпрессовская) дополнялась соответствующей информацией из моей БД.

    Не нашел другого способо реализовать это, кроме как в functions.php темы вставить функции работы с моей БД, и делать запросы из уникального шаблона странички.

    Этим функциям нужны свои переменные, передаваемые по адресной строке, например, ?se=2008-2009. Но пермалинковские правила изменения УРЛа вордпресса не обрабатывают эти переменные, и в итоге я получаю адресную строку вида http://mysite.ru/wp/seas/?se=2008-2009 (seas — wp-страничка, в шаблоне которой обрабатывается значение se). Работает замечательно, но хотелось бы довести красоту до конца и иметь http://mysite.ru/wp/seas/2008-2009/ при той же функциональности.

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

    Я так понял, что надо или чтобы http://mysite.ru/wp/seas/2008-2009/, не меняя содержимого адресной строки, обрабатывался как http://mysite.ru/wp/seas/?se=2008-2009, или наоборот, чтобы http://mysite.ru/wp/seas/?se=2008-2009 перерисовывался в http://mysite.ru/wp/seas/2008-2009/, при этом оставаясь корректно обрабатываемым. Однако у меня так ничего и не получилось. Отчаявшись, обращаюсь за помощью к вам.

    permalinks: /%category%/%post_id%/
    advansed permalinks: страничка категории без базиса. Category pages: /%category%/

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    1. Приведите пример неработающих правил.
    2. Есть и третий вариант — обрабатывать строку внутри самого WordPress, но с .htaccess, наверное, проще.

    спасибо, что отозвались
    1. ну вот, http://mysite.ru/wp/seas/2008-2009/ не работает (а работает вариация http://mysite.ru/wp/seas/?se=2008-2009)
    2. да, я тоже вчера вечером подумал.
    строка
    RewriteRule . /wp/index.php [L]
    как я понял, означает «всю адресную строку вордпресса заменяем на index.php, который уже внутри обрабатывает всё это».
    Значит, можно внутри него вставить фрагменты обработки и моих переменных наравне с cat, p и другими.
    Осталось только узнать, где в коде это осуществляется.

    вроде бы это в wp-includes/rewrite.php
    http://phpxref.com/xref/wordpress/wp-includes/rewrite.php.source.html

    ухх

    http://www.prodeveloper.org/create-your-own-rewrite-rules-in-wordpress.html
    что-то уже близкое… уже щупаю) (от помощи всё еще не отказываюсь=)

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Да, это именно то 🙂

    уфф. мозг стёрся порядочно от этой проблемы. еще мой деревянный английский…но в итоге complete (при достижении профита минут пять прыгал с поднятыми руками)

    как в итоге было сделано (если вдруг кому надо):

    в functions.php темы добавляем:

    принудительное обновление пермалинков:

    add_action('init', 'seasons_flush_rewrite_rules');
    function seasons_flush_rewrite_rules()
    {
       global $wp_rewrite;
       $wp_rewrite->flush_rules();
    }

    добавление нового правила обработки (по ссылке двумя постами выше более продвинутый вариант, который с помощью RewriteAPI`шных функций генерируют правила для всех возможных вариантов. У меня же урезанный вариант, т.к. больше и не надо) :

    add_action('generate_rewrite_rules', 'seasons_add_rewrite_rules');
    function seasons_add_rewrite_rules( $wp_rewrite )
    {
      $new_rules = array(
         'seas/(.+?)/?$' => 'index.php?pagename=seas&se=' .
           $wp_rewrite->preg_index(1) );
      $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }

    Чтобы не просто адресная строка менялась, но и заключенная в ней нужная нам переменная сохранялась:

    function query_vars($public_query_vars) {
     	$public_query_vars[] = "se";
    	return $public_query_vars;
    }
    add_filter('query_vars', 'query_vars');

    После чего в шаблон странички добавляем:

    global $wp_query, $wp_rewrite;
    if ($wp_rewrite->using_permalinks()) {
       $seas = $wp_query->query_vars['se'];
    } else {
       $seas = $_REQUEST['se'];//или GET
    }

    $seas — то что нужно.

    опять же, всё это есть тут и даже тут, я просто подрезал од себя.

    всем спасибо.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «ModRewrite УРЛа вне обработки вордпрессом» закрыта для новых ответов.