settings = $settings;
}
/**
* Register hooks.
*
* @return void
*/
public function register() {
add_filter( 'acelora_site_accelerator_optimize_html', array( $this, 'optimize_html' ), 20 );
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_critical_css' ) );
}
/**
* Optimize HTML CSS assets.
*
* @param string $html HTML.
* @return string
*/
public function optimize_html( $html ) {
if ( $this->settings->get( 'css.minify', 1 ) ) {
$html = preg_replace_callback(
'##is',
function ( $matches ) {
return '';
},
$html
);
}
return $html;
}
/**
* Enqueue critical CSS through WordPress' stylesheet API.
*
* @return void
*/
public function enqueue_critical_css() {
$critical = trim( (string) $this->settings->get( 'css.critical_css', '' ) );
if ( '' === $critical ) {
return;
}
wp_register_style( 'acelora-critical-css', false, array(), ACELORA_SITE_ACCELERATOR_VERSION );
wp_enqueue_style( 'acelora-critical-css' );
wp_add_inline_style( 'acelora-critical-css', $this->minify( $critical ) );
}
/**
* Minify CSS.
*
* @param string $css CSS.
* @return string
*/
public function minify( $css ) {
$css = preg_replace( '#/\*[^!*][\s\S]*?\*/#', '', $css );
$css = preg_replace( '/\s+/', ' ', $css );
$css = preg_replace( '/\s*([{}:;,>])\s*/', '$1', $css );
$css = str_replace( ';}', '}', $css );
return trim( $css );
}
}