LESS CSS enqueue_style với add_filter để thay đổi thuộc tính rel


8

Những gì tôi đang cố gắng làm là sử dụng ít css hơn với Wordpress.

Bạn phải liên kết đến các tệp .less của mình với thuộc tính rel được đặt thành 'biểu định kiểu / ít hơn'. Nhưng tôi không thể tìm ra cách thay đổi mã mà enqueue_style xuất ra.

Có cách nào để áp dụng bộ lọc và ảnh hưởng đến đầu ra không?

EDIT: Nếu bất kỳ ai tò mò về việc cuối cùng tôi đã làm việc này như thế nào, thì đây là đoạn mã:

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);

Tại sao bạn muốn tải một biểu định kiểu .less? Chúng được sử dụng tốt nhất trong quá trình phát triển sau đó được xuất sang CSS bình thường, điều mà tôi không nghĩ là trường hợp của bạn bởi vì bạn đang hỏi làm thế nào để nó hoạt động với enqueue_style :)
onetrickpony

Tôi chuyển đổi chúng thành css trong quá trình xây dựng. Bạn nói đúng, điều này hoàn toàn chỉ dành cho mục đích phát triển.
cbaigorri

Cảm ơn bạn đã đăng đoạn mã, vì điều đó đã giải quyết vấn đề của tôi. Tôi đã tìm thấy một kịch bản tương tự ở nơi khác, nhưng nó không hoạt động.
ScottS

Tôi đã thêm "\ r \ n" vào cuối giá trị thẻ $ khi nó đang nối các dòng trong HTML của tôi. $tag = "<link rel='stylesheet/less' id='$handle' $title href='$href' type='text/less' media='$media' />\r\n";
jnthnclrk

Câu trả lời:


5

Đúng, đầu ra liên kết kiểu cuối cùng được chuyển qua style_loader_tagbộ lọc.


2

Tôi đã tạo một hàm sử dụng phương thức query () của lớp WP_Dependancies. Hơn nữa, nó không tái tạo đầu ra, mà thay vào đó chỉ viết lại các phần cần thiết.

Hàm truy cập đối tượng $ wp_styles toàn cầu và thực hiện truy vấn để lấy đối tượng biểu định kiểu. Với regex, src được kiểm tra nếu nó chứa tệp .less và nếu điều đó là đúng, thuộc tính rel được sửa đổi cho phù hợp. Trong chức năng của mình, tôi cũng thay thế hậu tố -css trong ID bằng hậu tố không có, chỉ cần xóa dòng này nếu bạn không thích nó.

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;
}

0

thay đổi rel=stylesheetđể rel=stylesheet/lesstrong $tagđịnh nghĩa .. cũng rel=alternate stylesheet/less, không làm việc ..


2
"Câu trả lời này được tự động gắn cờ là chất lượng thấp vì độ dài và nội dung của nó", điều mà tôi chắc chắn rằng bạn không muốn. Bạn có thể thêm một số giải thích về giải pháp của bạn cũng như giải thích lý do tại sao bạn nghĩ rằng nó sẽ giải quyết vấn đề.
s_ha_dum

-1

Cảm ơn câu trả lời của bạn. Nó đã không làm việc cho tôi cho đến khi tôi đặt tiếng vang ở vị trí trở lại:

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' />";
    }
    echo $tag;
}
add_filter( 'style_loader_tag', 'enqueue_less_styles', 5, 2);

1
Điều đó có vẻ không đúng, các bộ lọc hoàn toàn sẽ trả lại đầu ra, nếu không, bạn đang phá vỡ chuỗi bộ lọc và làm mọi thứ rối tung lên.
Hết
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.