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;
}
}
}