Minimalizacja HTML w Wordpress

0

Mam motyw na WP i chciałem zminimalizować html do jednej linii.

Znalazłem rozwiązanie w necie:

 
class WP_HTML_Compression
{
        // Settings
        protected $compress_css = false;
        protected $compress_js = false;
        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);                
        }
        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 ($strip) {
                                $content = $this->removeWhiteSpace($content);
                        }
                        
                        $html .= $content;
                }
                
                return $html;
        }
                
        public function parseHTML($html)
        {
                $this->html = $this->minifyHTML($html);
                
                if ($this->info_comment)
                {
                        $this->html .= $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');

Wszystko fajnie działa, jednak chciałem żeby wszystko było w jednej linii, natomiast pierwsza jest pusta, kod zaczyna sie w drugiej.

Nie jestem programista, moglby ktos pomoc?

0

No nie wiem, zgaduję, że pewnie trzeba tutaj return $this->html; dołożyć usuwanie znaku/znaków nowej linii ;p
Ewentualnie również pod koniec metody minifyHTML.

0

Nie działa

0

Super.
Co to znaczy i jak zmieniłeś kod? ;p
Czy może mam powróżyć ze szklanej kuli? ;p

0

Może nową klasę a raczej plik z nową klasą zapisałeś z kodowaniem BOM ? Wtedy może się wstawić pusta linijka wynikająca z obecności trzech nie widocznych znaków określających format kodowania.

0

Probowalem zmieniac kodowanie, niestety dalej bez skutku

0
Patryk27 napisał(a):

Super.
Co to znaczy i jak zmieniłeś kod? ;p
Czy może mam powróżyć ze szklanej kuli? ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1