netconstructorcom
  • 0
Мастер

Изменение видимого пути URL к файлам css и js

  • 0

Кто-нибудь знает, как я могу автоматически включить:

http://www.example.com/wp-content/themes/theme-name/css/stylesheeet.css

в

http://www.example.com/css/stylesheet.css

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

Я ищу способ сохранить все файлы CSS и JavaScript в папке темы, но я хотел бы, чтобы WordPress показывал указанный выше URL-адрес, если вы просматриваете источник страницы.

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

Share
  1. Навскидку, я думаю, вам понадобятся две вещи:

    Во-первых, правило перезаписи в вашем файле.htaccess выглядит так:

    RewriteEngine On
    RewriteBase /
    RewriteRule ^css/(.*) /wp-content/themes/theme-name/css/$1 [L]
    RewriteRule ^js/(.*) /wp-content/themes/theme-name/js/$1 [L]
    

    Во-вторых, добавьте фильтр в functions.php вашей темы следующим образом:

    function change_css_js_url($content) {
        $current_path = '/wp-content/themes/theme-name/';
        $new_path = '/'; // No need to add /css or /js here since you're mapping the subdirectories 1-to-1
        $content = str_replace($current_path, $new_path, $content);
        return $content;
    }
    add_filter('bloginfo_url', 'change_css_js_url');
    add_filter('bloginfo', 'change_css_js_url');
    

    Пара предостережений: — если плагин или что-то еще не использует bloginfo() или get_bloginfo(), фильтр не активируется. Вы можете обойти это, подключив свою функцию к другим фильтрам по мере необходимости. — некоторые плагины/темы/и т.д. используют жестко заданные пути. Вы ничего не можете с этим поделать, кроме как изменить код, чтобы использовать одну из функций WP для получения пути.

    Вот тот же пример с использованием темы двадцать десять (без подкаталогов css/js, но идея та же).

    .htaccess

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^twentyten/(.*) /wp-content/themes/twentyten/$1 [L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
    

    functions.php

    function change_css_js_url($content) {
        $current_path = '/wp-content/themes/';
        $new_path = '/'; // No need to add /css or /js here since you're mapping the subdirectories 1-to-1
        $content = str_replace($current_path, $new_path, $content);
        return $content;
    }
    add_filter('bloginfo_url', 'change_css_js_url');
    add_filter('bloginfo', 'change_css_js_url');
    
    • 0
    • @gabrielk Это кажется отличным решением, но по какой-то причине это не работает для меня. Я пошел дальше и добавил применимые правила перезаписи, добавил применимый файл functions.php и удостоверился, что оба пути к исходным местоположениям были действительными. Затем я перезапустил apache, но при обновлении браузера я вообще не вижу никаких изменений. Я также должен отметить, что все файлы моей темы ссылаются на каталог шаблонов с помощью . Не могли бы вы просмотреть этот код в своей системе, чтобы увидеть, что нужно изменить, чтобы он работал правильно?

      • 0
    • Хм, у меня работает. Я только что протестировал его, используя тему «двадцать десять» — слегка измененную, поскольку в этой теме нет подкаталога css/js.

      • 0
    • не могли бы вы проверить еще раз… я не могу понять, почему у меня не работает

      • 0
    • Извините за поздний ответ, уезжал на выходные. Два вопроса: 1) Работают ли уже постоянные ссылки на вашем сайте? 2) Если у вас есть чистая рабочая копия WP 3.0.1 с включенной темой Twentyten и включенными постоянными ссылками, работает ли второй фрагмент кода, который я разместил, для вас?

      • 0
    • 1) да, включено и работает. 2) Я не использую тему двадцать десять, я создал свою собственную тему, НО в файлах шаблонов для этой темы я всегда использовал всякий раз, когда упоминается ссылка на изображение или файл. Добавление моей собственной темы и применимых файлов шаблонов — это неправильный способ сделать что-то? Если это правильно, то, возможно, я упустил что-то, что помешало бы изменить URL-адрес для достижения желаемого результата?

      • 0
    • +1 Единственная проблема, которую я вижу, заключается в том, что символическая ссылка должна быть создана для любой загружаемой и активированной темы. В остальном хорошее решение!

      • 0
    • другая проблема — это означает, что вам действительно нужно вручную заменить вызовы заголовков

      • 0
    • большое спасибо за этот ответ. На самом деле я тоже думал об этом, но я надеялся, что может быть какой-то способ добавить код в файл functions.php, который автоматически сообщит WordPress изменить местоположение всех запросов, идущих к истинному местоположению, на эти новые «виртуальные Места… Кто-нибудь знает, как это можно сделать?

      • 0
  2. В идеальной ситуации я ищу фрагмент кода, который можно добавить, который автоматически> делает это для всех файлов, на которые есть ссылки в папке моей темы, включая любые изображения.

    Я собираюсь предложить альтернативное решение, которое решит проблему.

    Создайте символическую ссылку из wp-content/themes/your-theme в ваш корневой каталог/css

    Для создания символической ссылки в Linux используйте #ln -s команду. Например:

    #ln -s /home/user-name/public_html/wp-content/themes/your_theme_name /home/user-name/public_html/css
    

    Теперь к любому файлу в http://example.com/wp-content/themes/your_theme_name/ можно получить доступ, используя URL:

    http://example.com/css/

    Чтобы это работало, вы должны разрешить директиву FollowSymLinks в вашем файле httpd.conf. Вы также можете поместить его в файл.htaccess, который переопределит настройку в httpd.conf.

    В httpd.conf настройка будет такой:

    <Directory />
    Options Indexes FollowSymLinks
    </Directory>
    

    Прежде чем изменения вступят в силу, вам придется перезапустить Apache:

    #/etc/init.d/apache2 restart
    

    Вы можете прочитать больше о SymLinks в Maxi-Pedia и в Apache Docs.

    • 0

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

You must login to add an answer.