Minify Html trong wordpress không cần plugin

Minify Html trong wordpress không cần plugin

Có thể bạn thích ?

Khi chúng ta view source của 1 website trong trình duyệt thì có đôi khi ta thấy code đó như 1 đám rừng, rất khó đọc. Đó gọi là Minify Html (hay còn gọi là nén source trong đó có css và javascript inline).

Nếu chúng ta Minify html thì website sẽ bỏ nhưng ký tự trắng và xuống dòng dư thừa. Điều này giúp cho website ít tốn dung lượng khi render website (tối ưu website và tốt cho seo) và hạn chế dân developer khó soi code hơn (chỉ tương đối thôi). Sau đây là đoạn code (tạm thời ta lưu thành file kk-compression.php)

File kk-compression.php

class WP_HTML_Compression
{
    // Settings
    protected $compress_css = true;
    protected $compress_js = true;
    protected $info_comment = true;
    protected $remove_comments = true;

    // Variables
    protected $html;
    public function __construct($html)
    {
        if (!empty($html))
        {
            $this->parseHTML($html);
        }
    }
    public function __toString()
    {
        return $this->html;
    }
    protected function bottomComment($raw, $compressed)
    {
        $raw = strlen($raw);
        $compressed = strlen($compressed);
        
        $savings = ($raw-$compressed) / $raw * 100;
        
        $savings = round($savings, 2);
        
        return '<!--HTML compressed, size saved '.$savings.'%. From '.$raw.' bytes, now '.$compressed.' bytes-->';
    }
    protected function minifyHTML($html)
    {
        $pattern = '/<(?<script>script).*?<\/script\s*>|<(?<style>style).*?<\/style\s*>|<!(?<comment>--).*?-->|<(?<tag>[\/\w.:-]*)(?:".*?"|\'.*?\'|[^\'">]+)*>|(?<text>((<[^!\/\w.:-])?[^<]*)+)|/si';
        preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);
        $overriding = false;
        $raw_tag = false;
        // Variable reused for output
        $html = '';
        foreach ($matches as $token)
        {
            $tag = (isset($token['tag'])) ? strtolower($token['tag']) : null;
            
            $content = $token[0];
            
            if (is_null($tag))
            {
                if ( !empty($token['script']) )
                {
                    $strip = $this->compress_js;
                }
                else if ( !empty($token['style']) )
                {
                    $strip = $this->compress_css;
                }
                else if ($content == '<!--wp-html-compression no compression-->')
                {
                    $overriding = !$overriding;
                    
                    // Don't print the comment
                    continue;
                }
                else if ($this->remove_comments)
                {
                    if (!$overriding && $raw_tag != 'textarea')
                    {
                        // Remove any HTML comments, except MSIE conditional comments
                        $content = preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->/s', '', $content);
                    }
                }
            }
            else
            {
                if ($tag == 'pre' || $tag == 'textarea')
                {
                    $raw_tag = $tag;
                }
                else if ($tag == '/pre' || $tag == '/textarea')
                {
                    $raw_tag = false;
                }
                else
                {
                    if ($raw_tag || $overriding)
                    {
                        $strip = false;
                    }
                    else
                    {
                        $strip = true;
                        
                        // Remove any empty attributes, except:
                        // action, alt, content, src
                        $content = preg_replace('/(\s+)(\w++(?<!\baction|\balt|\bcontent|\bsrc)="")/', '$1', $content);
                        
                        // Remove any space before the end of self-closing XHTML tags
                        // JavaScript excluded
                        $content = str_replace(' />', '/>', $content);
                    }
                }
            }
            
            if (isset($strip) && $strip)
            {
                $content = $this->removeWhiteSpace($content);
            }
            
            $html .= $content;
        }
        
        return $html;
    }
        
    public function parseHTML($html)
    {
        $this->html = $this->minifyHTML($html);
        
        if ($this->info_comment)
        {
            $this->html .= "\n" . $this->bottomComment($html, $this->html);
        }
    }
    
    protected function removeWhiteSpace($str)
    {
        $str = str_replace("\t", ' ', $str);
        $str = str_replace("\n",  '', $str);
        $str = str_replace("\r",  '', $str);
        
        while (stristr($str, '  '))
        {
            $str = str_replace('  ', ' ', $str);
        }
        
        return $str;
    }
}

function wp_html_compression_finish($html)
{
    return new WP_HTML_Compression($html);
}

function wp_html_compression_start()
{
    ob_start('wp_html_compression_finish');
}

add_action('get_header', 'wp_html_compression_start');

/**************************************************************
//Kiểm tra nếu người dùng không đăng nhập thì không Minify Html
add_action('get_header', function(){
    if (!is_user_logged_in()) wp_html_compression_start();
});
**************************************************************/

Cách dùng (thêm dòng này vào file functions.php)

require get_template_directory() . '/inc/kk-custom-section.php';

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *


Liên Hệ

Tp Mỹ Tho, Tiền Giang

0919 344 644