two_bg_lazyload = get_option('two_bg_lazyload', 'off'); $this->two_video_lazyload = get_option('two_video_lazyload', 'off'); $this->two_iframe_lazyload = get_option('two_iframe_lazyload', 'off'); $this->two_exclude_js = get_option('two_exclude_js', 'wp-content/cache/, wp-includes/js/dist/, wp-includes/js/tinymce/, js/jquery/jquery.js'); $this->init(); } public function init() { $this->init_defines(); require_once('twoptimizeBase.php'); require_once('twoptimizeScripts.php'); require_once('twoptimizeCSS.php'); require_once('twoptimizeLazyload.php'); $optimizeLazyLoad = new twoptimizeLazyload(); add_action('wp_footer', array($this, 'add_lazyload_js_footer'), 10, 0); $optimizeLazyLoad->addFilterForImages(); if ($this->two_iframe_lazyload === 'on') { $optimizeLazyLoad->addFilterForIframes(); } if ($this->two_video_lazyload === 'on') { $optimizeLazyLoad->addFilterForVideo(); } ob_start(array($this, 'end_buffering')); } private function init_defines() { if (!defined('TWMO_LAZYLOAD')) { define('TWMO_LAZYLOAD', true); } if (!defined('TWMO_WP_SITE_URL')) { if (function_exists('domain_mapping_siteurl')) { define('TWMO_WP_SITE_URL', domain_mapping_siteurl(get_current_blog_id())); } else { define('TWMO_WP_SITE_URL', site_url()); } } if (!defined('TWMO_WP_CONTENT_URL')) { if (function_exists('get_original_url')) { define('TWMO_WP_CONTENT_URL', str_replace(get_original_url(TWMO_WP_SITE_URL), TWMO_WP_SITE_URL, content_url())); } else { define('TWMO_WP_CONTENT_URL', content_url()); } } if (!defined('TWMO_WP_CONTENT_NAME')) { define('TWMO_WP_CONTENT_NAME', '/' . wp_basename(WP_CONTENT_DIR)); } if (!defined('TWMO_WP_ROOT_URL')) { define('TWMO_WP_ROOT_URL', str_replace(TWMO_WP_CONTENT_NAME, '', TWMO_WP_CONTENT_URL)); } if (!defined('TWMO_CACHE_URL')) { if (is_multisite()) { $blog_id = get_current_blog_id(); define('TWMO_CACHE_URL', TWMO_WP_CONTENT_URL . TWMO_CACHE_CHILD_DIR . $blog_id . '/'); } else { define('TWMO_CACHE_URL', TWMO_WP_CONTENT_URL . TWMO_CACHE_CHILD_DIR); } } define('WP_ROOT_DIR', substr(WP_CONTENT_DIR, 0, strlen(WP_CONTENT_DIR) - strlen(TWMO_WP_CONTENT_NAME))); if (!defined('TWMO_HASH')) { define('TWMO_HASH', wp_hash(TWMO_CACHE_URL)); } define('TWMO_CACHE_NOGZIP', true); if (!defined('TWMO_CACHEFILE_PREFIX')) { define('TWMO_CACHEFILE_PREFIX', 'twmo_'); } } public static function optimize() { if (self::$instance === null) { self::$instance = new self; } return self::$instance; } public function add_lazyload_js_footer() { if (TWMO_LAZYLOAD) { if ($this->two_iframe_lazyload === 'on' || $this->two_bg_lazyload === 'on' || $this->two_video_lazyload === 'on') { $noptimize_flag = ' data-noptimize="1"'; echo ''; echo ''; if ($this->two_iframe_lazyload === 'on') { echo ''; } if ($this->two_video_lazyload === 'on') { echo ''; } if ($this->two_bg_lazyload === 'on') { echo ''; } echo " "; } } } /** * @param $content * return html content * * @return mixed|string|void */ private function end_buffering($content) { //this one must work always because it disables pagespeed lazyload through html attribute $content = apply_filters('twoptimize_html_lazyload_images', $content); if ($this->two_video_lazyload === 'on') { $content = apply_filters('twoptimize_html_lazyload_video', $content); } if ($this->two_iframe_lazyload === 'on') { $content = apply_filters('twoptimize_html_lazyload_iframes', $content); } $twoptimizeScripts = new twoptimizeScripts($content); $twoptimizeScripts->read( array( 'js_exclude' => $this->two_exclude_js, ) ); $content = $twoptimizeScripts->getcontent(); $twoptimizeStyles = new twoptimizeCSS(); $content = $twoptimizeStyles->run($content); return $content; } } }