LESS CSS enqueue_style с add_filter для изменения атрибута rel

Я пытаюсь использовать меньше css с помощью Wordpress.

Предполагается, что вы должны ссылаться на ваши .less-файлы с атрибутом rel, установленным на «stylesheet /less». Но я не могу понять, как изменить код, который выводит outque_style.

Есть ли способ применить фильтр и повлиять на вывод?

EDIT: Если кому-то интересно узнать, как я закончил работу, вот фрагмент кода:

function enqueue_less_styles($tag, $handle) {
    global $wp_styles;
    $match_pattern = '/\.less$/U';
    if ( preg_match( $match_pattern, $wp_styles->registered[$handle]->src ) ) {
        $handle = $wp_styles->registered[$handle]->handle;
        $media = $wp_styles->registered[$handle]->args;
        $href = $wp_styles->registered[$handle]->src . '?ver=' . $wp_styles->registered[$handle]->ver;
        $rel = isset($wp_styles->registered[$handle]->extra['alt']) && $wp_styles->registered[$handle]->extra['alt'] ? 'alternate stylesheet' : 'stylesheet';
        $title = isset($wp_styles->registered[$handle]->extra['title']) ? "title='" . esc_attr( $wp_styles->registered[$handle]->extra['title'] ) . "'" : '';

        $tag = "<link rel='stylesheet' id='$handle' $title href='$href' type='text/less' media='$media' />";
    }
    return $tag;
}
add_filter( 'style_loader_tag', 'enqueue_less_styles', 5, 2);
8 голосов | спросил cbaigorri 23 J0000006Europe/Moscow 2011, 22:59:59

1 ответ


2

Я создал функцию, которая использует метод query () класса WP_dependancies. Кроме того, он не регенерирует выход, а вместо этого просто перезаписывает необходимые части.

Функция обращается к глобальному объекту $ wp_styles и выполняет запрос для получения объекта таблицы стилей. С регулярным выражением src проверяется, содержит ли он файл без значения, и если это так, атрибут rel изменяется соответствующим образом. В моей функции я, кроме того, заменил -css-суффикс в ID без суффикса без ограничений, просто удалите эту строку, если вам это не нравится.

function allow_less_stylesheets( $style_tag, $handle )
{
    global $wp_styles;

    $obj = $wp_styles->query( $handle );
    if( $obj === false )
    {
        return $style_tag;
    }
    if( !preg_match( '/\.less$/U', $obj->src ) )
    {
        return $style_tag;
    }

    // the current stylesheet is a LESS stylesheet, so make according changes
    $rel = isset( $obj->extra['alt'] ) && $obj->extra['alt'] ? 'alternate stylesheet' : 'stylesheet';
    $style_tag = str_replace( "rel='" . $rel . "'", "rel='stylesheet/less'", $style_tag );
    $style_tag = str_replace( "id='" . $handle . "-css'", "id='" . $handle . "-less'", $style_tag );
    return $style_tag;
}
ответил flixos90 4 +04002013-10-04T16:56:09+04:00312013bEurope/MoscowFri, 04 Oct 2013 16:56:09 +0400 2013, 16:56:09

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132