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 '' . $this->minify( $matches[2] ) . ''; }, $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 ); } }