I was using this code to minify HTML output in wordpress.
It works perfect on the main page and on the post page, but in the admin section it causes a lot of problems.
function minify_html(){
ob_start('html_compress');
}
function html_compress($buffer){
$search = array(
'/n/', // replace end of line by a space
'/>[^S ]+/s', // strip whitespaces after tags, except space
'/[^S ]+</s', // strip whitespaces before tags, except space
'/(s)+/s', // shorten multiple whitespace sequences,
'~<!--//(.*?)-->~s' //html comments
);
$replace = array(
' ',
'>',
'<',
'\1',
''
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
add_action('wp_loaded','minify_html');
Using ‘the_post’ instead of ‘wp_loaded’ minifies only the posts, but I’d like to be able to minify at 100% the main page, and the post page, but nothing in the admin section.
How can I combine the actions in order to manage it?
Thank you!
Nice Code, exclude admin :
It works well WP admin !
There is a troubleshoot case where replacing empty space with preg_replace causes invalid characters with UTF-8. (eg:
Ã
encoding would fail and result in�
). This is due to a mismatch between the current locale and the defined locale. We can use the/u
flag as a way to properly filterUTF-8
characters.In some instances, removing new lines and multiple spaces from inline
<script>
tags will cause the script to break. Isolating the<script>
tag’s content will prevent this from happening which is done by splitting the buffer into an array delimited by opening and closing script tags throughpreg_split()
.