• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

QUESTION How to get a link to cached compressed CSS?

Messages
5
Likes
0
Points
1
#1
Здравствуйте, заранее прошу прощения так как перевёл тест через гугл переводчик.
Плагин делает объединённый и сжатый css файл и помещает его в head, я хочу использовать ссылку и разместить её в заголовках ответа сервера. Цель более быстрая загрузка файла. Как мне узнать ссылку?

Hello, I apologize in advance because I translated the test through Google translator.
The plugin makes a combined and compressed CSR file and places it in the head, I want to use the link and place it in the server response headers. The goal is faster file loading. How can I find the link?
 

alexkovalev

Program developer
Staff member
Messages
267
Likes
19
Points
18
#2
Здравствуйте!

Ссылки эти могут быть изменены при сбросе кеша в плагине, поэтому их можно получить только с помощью кода, к примеру
вот так:

PHP:
add_filter( 'wmac_filter_cache_getname', function ( $url ) {
    if ( preg_match( '/\.css$/', $url ) ) {
        $css_url = $url;
    }
});
Этот фильтр вызывается каждый раз, когда плагин пытается получить пусть к файлу ресурсов из кеша. А значит если вы не объединяете файлы, то он будет вызван для каждого файла ресурса.

Если у вас одна ссылка, то она будет в переменной $css_url. Если подробно опишите механизм, который вы хотите реализовать, возможно, я смогу предложить какое-то решение. Простого способа получить ссылку, нет.
 
Messages
5
Likes
0
Points
1
#4
Здравствуйте ещё раз. А возможно ли сделать чтобы ссылка на css была всегда статична. В идеале чтобы файл всегда имел одно имя и находился в одной папке, но если так не выйдет, то хотя бы другой вариант, чтобы файл по одной ссылке отдавал php.

Поясню зачем мне это надо. Я наладил отдачу кэша страниц через Nginx без запроса в php, и теперь я хочу поместить ссылки важных ресурсов на предзагрузку в заголовки ответа сервера. С постоянными ссылками проблем нет, их я добавил в заголовок директивами в nginx, а вот динамическую ссылку я никак добавить не могу средствами nginx.
 
Messages
5
Likes
0
Points
1
#5
Я подумал что могу использовать вот это
PHP:
add_filter( 'wmac_filter_cache_getname', function ( $url ) {
    if ( preg_match( '/\.css$/', $url ) ) {
        $css_url = $url;
        if ( $_GET['css'] == 'test' ) { 'А вот тут я вывожу содержимое файла css и обрубаю дальнейшую обработку страницы' }
    }
});
Только Ваш код даёт мне ссылку на файл, а не путь до него. Я конечно могу сам выдернуть из ссылки правую часть от урла и с переди подставить не достающий путь, но может есть переменная которая сразу покажет мне путь без лишних телодвижений?

Или может есть более элегантный способ?
 
Messages
5
Likes
0
Points
1
#6
Слепил вот такое
PHP:
if ( $_GET['css'] == 'test' ) {
        add_filter( 'wmac_filter_cache_getname', function ( $url ) {
                if ( preg_match( '/\.css$/', $url ) ) {
                      readfile('ПУТЬДОПАПКИССАЙТОМ/wp-content/cache/wmac/css/' . explode("/", $url)[7]);
                }
        });
        exit;
}
Но в таком случае не отдаётся урл с css. Я так понимаю из-за параметра css.
 

alexkovalev

Program developer
Staff member
Messages
267
Likes
19
Points
18
#7
Здравствуйте,

Проблема в том, что если имена файлов будут статичны, то они будут кешироваться браузером. Например, когда вы устанавливает новые плагины или исключаете какие-то файлы ресурсов, то имя файла меняется, чтобы он был актуальной версии, а не из кеша браузера.

Слепил вот такое
PHP:
if ( $_GET['css'] == 'test' ) {
        add_filter( 'wmac_filter_cache_getname', function ( $url ) {
                if ( preg_match( '/\.css$/', $url ) ) {
                      readfile('ПУТЬДОПАПКИССАЙТОМ/wp-content/cache/wmac/css/' . explode("/", $url)[7]);
                }
        });
        exit;
}
Но в таком случае не отдаётся урл с css. Я так понимаю из-за параметра css.
Этот код не будет работать, потому что, во первых вы прерываете выполнение кода с помощью exit;, то есть фильтр wmac_filter_cache_getname не будет выполнен. Если пойти другим путем, все равно ссылку мы можем получить только после полной загрузки Wordpress, а это значит, что мы не можем пойти таким способом, какой вы предлагаете. Тут нужно либо сохранять эту ссылку куда-то, а при следующем запросе страницы брать ссылку из временного кеша, либо искать другой способ для решения вашей проблемы. Я подумаю еще, как это можно более надежно сделать, пока нет идей.