Yoast插件的WordPress SEO干扰了一个自定义函数代码--如何进行故障排除和修复?

时间:2015-06-19 作者:Kupalzky

我正在尝试优化我的WP网站上的页面负载。我复制了一个自定义函数(不记得是从哪里提取的)来优化我的页面。

它可以做到以下几点:

将javascript移动到页脚,将css链接放在页眉上,折叠空格,删除html注释,该功能很好地发挥了作用,但当我安装并激活WordPress SEO插件时(v2.2.1), 自定义函数不再缩小我的html页面。

我说的自定义代码是:

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 ($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\');
在我的函数中使用此函数。php将我的页面大小减少到几乎5%。

1 个回复
SO网友:fjorge

我们通过更换挂钩使其工作:

add_action( \'wp_loaded\', \'wp_html_compression_start\' );

结束