settings_screen_do_remote_http = apply_filters( 'autoptimize_settingsscreen_remotehttp', $this->settings_screen_do_remote_http ); $this->run(); } protected function enabled() { return apply_filters( 'autoptimize_filter_show_criticalcss_tabs', true ); } public function run() { if ( $this->enabled() ) { add_filter( 'autoptimize_filter_settingsscreen_tabs', array( $this, 'add_critcss_tabs' ), 10, 1 ); add_action( 'admin_enqueue_scripts', array( $this, 'admin_assets' ) ); if ( $this->is_multisite_network_admin() && autoptimizeOptionWrapper::is_ao_active_for_network() ) { add_action( 'network_admin_menu', array( $this, 'add_critcss_admin_menu' ) ); } else { add_action( 'admin_menu', array( $this, 'add_critcss_admin_menu' ) ); } $criticalcss_ajax = new autoptimizeCriticalCSSSettingsAjax(); } } public function add_critcss_tabs( $in ) { $in = array_merge( $in, array( 'ao_critcss' => '⚡ ' . __( 'Critical CSS', 'autoptimize' ) ) ); return $in; } public function add_critcss_admin_menu() { // Register settings. register_setting( 'ao_ccss_options_group', 'autoptimize_css_defer_inline' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_rules' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_additional' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_queue' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_viewport' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_finclude' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_rtimelimit' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_noptimize' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_debug' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_key' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_keyst' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_loggedin' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_forcepath' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_deferjquery' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_domain' ); register_setting( 'ao_ccss_options_group', 'autoptimize_ccss_unloadccss' ); // And add submenu-page. add_submenu_page( null, 'Critical CSS', 'Critical CSS', 'manage_options', 'ao_critcss', array( $this, 'ao_criticalcsssettings_page' ) ); } public function admin_assets( $hook ) { // Return if plugin is not hooked. if ( 'settings_page_ao_critcss' != $hook && 'admin_page_ao_critcss' != $hook ) { return; } // Stylesheets to add. wp_enqueue_style( 'wp-jquery-ui-dialog' ); wp_enqueue_style( 'ao-tablesorter', plugins_url( 'critcss-inc/css/ao-tablesorter/style.css', __FILE__ ) ); wp_enqueue_style( 'ao-ccss-admin-css', plugins_url( 'critcss-inc/css/admin_styles.css', __FILE__ ) ); // Scripts to add. wp_enqueue_script( 'jquery-ui-dialog', array( 'jquery' ) ); wp_enqueue_script( 'md5', plugins_url( 'critcss-inc/js/md5.min.js', __FILE__ ), null, null, true ); wp_enqueue_script( 'tablesorter', plugins_url( 'critcss-inc/js/jquery.tablesorter.min.js', __FILE__ ), array( 'jquery' ), null, true ); wp_enqueue_script( 'ao-ccss-admin-license', plugins_url( 'critcss-inc/js/admin_settings.js', __FILE__ ), array( 'jquery' ), null, true ); } public function ao_criticalcsssettings_page() { // these are not OO yet, simply require for now. require_once( 'critcss-inc/admin_settings_rules.php' ); require_once( 'critcss-inc/admin_settings_queue.php' ); require_once( 'critcss-inc/admin_settings_key.php' ); require_once( 'critcss-inc/admin_settings_adv.php' ); require_once( 'critcss-inc/admin_settings_explain.php' ); // fetch all options at once and populate them individually explicitely as globals. $all_options = autoptimizeCriticalCSSBase::fetch_options(); foreach ( $all_options as $_option => $_value ) { global ${$_option}; ${$_option} = $_value; } ?>

Generated by Autoptimize' ); } else { $fileresp = true; } // Warn if we could not create those files. if ( ( ! $mkdirresp ) || ( ! $fileresp ) ) { ?>

activate the \"Inline and Defer CSS\" option on Autoptimize's main settings page to ensure critical CSS is used on the front-end.", 'autoptimize' ); ?>

the FAQ or the info in the Job Queue instructions if all jobs remain in "N" status and no rules are created.', 'autoptimize' ); ?>

microtime( true ) - 60 * 60 * 4 ) { $_jobs_too_old = false; } if ( $_jobs_all_new && ! $this->ao_ccss_has_autorules() && $_jobs_too_old ) { $_warn_cron = 'on'; $_transient_multiplier = 1; // store for 1 hour. } else { $_warn_cron = 'off'; $_transient_multiplier = 4; // store for 4 hours. } // and set transient. set_transient( 'ao_ccss_cronwarning', $_warn_cron, $_transient_multiplier * HOUR_IN_SECONDS ); } if ( ! empty( $ao_ccss_key ) && 'on' == $_warn_cron && PAnD::is_admin_notice_active( 'i-know-about-cron-1' ) ) { ?>

the FAQ or the info in the Job Queue instructions if all jobs remain in "N" status and no rules are created.', 'autoptimize' ); ?>

ao_ccss_has_autorules() ) { ?>

edit default rule CSS now, to avoid all CSS being inlined when no (applicable) rules are found.', 'autoptimize' ); ?>

apply_filters( 'autoptimize_ccss_rules_length_warning', 500000 ) ) { ?>

is_multisite_network_admin() ) { ?>
  • Critical CSS settings cannot be set at network level as critical CSS is specific to each sub-site.

    You can however provide the critical CSS API key for use by all sites by adding this your wp-config.php as %s

    ', 'autoptimize' ), '
    define(\'AUTOPTIMIZE_CRITICALCSS_API_KEY\', \'eyJhbGmorestringsherexHa7MkOQFtDFkZgLmBLe-LpcHx4\');' ); ?>
"; echo ""; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } // Render key panel unconditionally. ao_ccss_render_key( $ao_ccss_key, $key['status'], $key['stmsg'], $key['msg'], $key['color'] ); ?>

is_multisite_network_admin() ) { echo ' class="hidden"'; } ?>>
is_multisite_network_admin() ) { // Include debug panel if debug mode is enable. if ( $ao_ccss_debug ) { ?>
'; include( 'critcss-inc/admin_settings_rules.js.php' ); include( 'critcss-inc/admin_settings_queue.js.php' ); include( 'critcss-inc/admin_settings_impexp.js.php' ); echo ''; } } public static function ao_ccss_has_autorules() { static $_has_auto_rules = null; if ( null === $_has_auto_rules ) { global $ao_ccss_rules; $_has_auto_rules = false; if ( ! empty( $ao_ccss_rules ) ) { foreach ( array( 'types', 'paths' ) as $_typat ) { foreach ( $ao_ccss_rules[ $_typat ] as $rule ) { if ( ! empty( $rule['hash'] ) ) { // we have at least one AUTO job, so all is fine. $_has_auto_rules = true; break; } } if ( $_has_auto_rules ) { break; } } } } return $_has_auto_rules; } public function is_multisite_network_admin() { static $_multisite_network_admin = null; if ( null === $_multisite_network_admin ) { if ( is_multisite() && is_network_admin() ) { $_multisite_network_admin = true; } else { $_multisite_network_admin = false; } } return $_multisite_network_admin; } }