wok
  • 0
Учитель

Как добавить правило перенаправления в WordPress?

  • 0

Прямо сейчас я могу динамически генерировать js и css на основе параметров моей темы.

Для этого я настроил переменную запроса, которая, если присутствует, перенаправляется в файл php, который затем загружается как файл javascript. После чего он берет jqpostID и получает любые параметры, которые мне нужны для создания моего js.

В основном мне нужно включить ссылку на скрипт, которая ссылается на часть местоположения моего html http://mywordpress.com/?dynamic=js&jqpostid=130.

Я хотел бы сделать его более читаемым и менее очевидным, что он создается динамически. может вот так…

http://mywordpress.com/dynamic/js/123

я полагаю, это было бы даже лучше… http://mywordpress.com/dynamic/js/123.js

Я полагаю, что мне нужно каким-то образом подключиться к механизму перезаписи wordpress. И добавить новое правило. Любая помощь или ссылки на другие статьи были бы замечательными, или какой-нибудь пример кода был бы потрясающим.

Share
  1. добавление этих функций должно помочь.

    Прежде всего, добавьте эту строку в functions.php, пока вы работаете над этим:

    add_action('init', 'flush_rewrite_rules');
    

    Что будет делать этот код, так это постоянно сбрасывать правила перезаписи, это упрощает тестирование, пока вы работаете над ним, вместо того, чтобы заходить и вручную сбрасывать их после каждого небольшого изменения, которое вы вносите в правила перезаписи. УБЕДИТЕСЬ, что вы удалили это, когда закончите и убедитесь, что все работает.

    Далее эта функция создаст нужные вам правила перезаписи.

    function custom_add_rewrite_rules( $wp_rewrite ) {
        $new_rules = array( 
            'dynamic/js/(\d+).js' => 'index.php?dynamic=js&jqpostid=' . $wp_rewrite->preg_index(1),
            'dynamic/css/(\d+).css' => 'index.php?dynamic=css&csspostid=' . $wp_rewrite->preg_index(1)
        );
        $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }
    add_action('generate_rewrite_rules', 'custom_add_rewrite_rules');
    

    Я попробовал, как, возможно, будет выглядеть правило CSS, возможно, вам придется настроить его для своих нужд, я просто подумал, что оно будет отформатировано так же, как вы описали для javascript. Это может вызвать странное поведение, когда он пытается переписать URL-адрес в расширение файла, и это может вообще не работать. В этом случае просто удалите.js и.css с конца первой части элементов ассоциативного массива.

    function custom_add_rewrite_rules( $wp_rewrite ) {
        $new_rules = array( 
            'dynamic/js/(\d+)' => 'index.php?dynamic=js&jqpostid=' . $wp_rewrite->preg_index(1),
            'dynamic/css/(\d+)' => 'index.php?dynamic=css&csspostid=' . $wp_rewrite->preg_index(1)
        );
        $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }
    add_action('generate_rewrite_rules', 'custom_add_rewrite_rules');
    

    По сути, все, что он делает, это устанавливает URL-адрес для поиска и строку, которую он запускает на своем месте. Первая часть записи массива содержит регулярное выражение, которое ищет только числа, часть в круглых скобках. (это можно настроить для поиска определенного количества цифр, если это необходимо) Совпадение которого передается во вторую часть записи массива как то, что будет возвращено в строке.

    Я надеюсь, что это поможет вам, не стесняйтесь обращаться ко мне, если у вас есть какие-либо проблемы.

    • 0
    • Спасибо, Дрю, работает отлично, даже с использованием расширений. Мне определенно нужно освежить свои знания о выражениях перенаправления. В любом случае, я должен попытаться составить описание динамически сгенерированных cs и js, которые ссылаются на внешний файл. Встроенный CSS и JS не идеальны для удобочитаемости. Осталось только выяснить, как кэшировать результаты в реально записанный файл 😛

      • 0
    • Регулярные выражения могут удивить даже опытных программистов. Я знаю, что они мне совсем не нравятся. Для таких вещей я обычно просто копаюсь в массиве $wp_rewrite для вещей, которые WordPress уже использует, и переделываю их для себя. Что касается результатов кэширования, вы можете загрузить файл PHP как файл JavaScript в заголовок вашего HTML через , и он все равно будет понят браузером. Я никогда не делал этого сам, поэтому не могу дать вам подробностей, но быстрый поиск в Google должен открыть вам дверь. Тот же метод должен работать и с CSS через .

      • 0
    • @Wok: Если вы собираетесь играть с правилами перезаписи, используйте мой плагин анализатора перезаписи. Он показывает вам все текущие правила, и вы можете поиграть с новыми URL-адресами, чтобы увидеть, какие правила соответствуют.

      • 0
    • @Jan Fabry: Я как раз искал что-то подобное, БОЛЬШОЕ СПАСИБО!

      • 0
    • @janfabry @drewgourley спасибо, ребята. Дрю, я заблокировал . Я думаю, что сейчас у меня довольно хорошая настройка. Я думаю, что файлы кеша будут в другой день. Ян – Ваш анализатор правил перезаписи – отличный инструмент. Надеюсь, ты продолжишь в том же духе. 🙂

      • 0

Оставить ответ

You must login to add an answer.