Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-conte.../plugins/themify-.../themify
File: themify-utils.php
$shop_url = themify_get_shop_permalink(); //wc bug, page id isn't set from wc settings,the default should be page with slug 'shop'
[1000] Fix | Delete
if ($shop_url !== '') {
[1001] Fix | Delete
$current_url = 'http';
[1002] Fix | Delete
if (is_ssl()) {
[1003] Fix | Delete
$current_url .= 's';
[1004] Fix | Delete
}
[1005] Fix | Delete
$current_url .= '://';
[1006] Fix | Delete
if (isset($_SERVER['HTTP_HOST'])) {
[1007] Fix | Delete
$current_url .= $_SERVER['HTTP_HOST'];
[1008] Fix | Delete
} else {
[1009] Fix | Delete
$host = parse_url(home_url(), PHP_URL_HOST);
[1010] Fix | Delete
if ($host !== false) {
[1011] Fix | Delete
$current_url .= $host;
[1012] Fix | Delete
}
[1013] Fix | Delete
unset($host);
[1014] Fix | Delete
}
[1015] Fix | Delete
$current_url .= strtok($_SERVER['REQUEST_URI'], '?');
[1016] Fix | Delete
$is = $current_url === $shop_url;
[1017] Fix | Delete
} else {
[1018] Fix | Delete
$is = false;
[1019] Fix | Delete
}
[1020] Fix | Delete
}
[1021] Fix | Delete
}
[1022] Fix | Delete
}
[1023] Fix | Delete
return $is;
[1024] Fix | Delete
}
[1025] Fix | Delete
[1026] Fix | Delete
/**
[1027] Fix | Delete
* Modified version of wp_parse_args which adds filters to modify the args
[1028] Fix | Delete
*
[1029] Fix | Delete
* @return array
[1030] Fix | Delete
* @since 2.7.7
[1031] Fix | Delete
*/
[1032] Fix | Delete
function themify_parse_args($args, $defaults = '', $filter_key = '') {
[1033] Fix | Delete
// Setup a temporary array from $args
[1034] Fix | Delete
if (is_object($args)) {
[1035] Fix | Delete
$r = get_object_vars($args);
[1036] Fix | Delete
} elseif (is_array($args)) {
[1037] Fix | Delete
$r = & $args;
[1038] Fix | Delete
} else {
[1039] Fix | Delete
wp_parse_str($args, $r);
[1040] Fix | Delete
}
[1041] Fix | Delete
// Passively filter the args before the parse
[1042] Fix | Delete
if (!empty($filter_key)) {
[1043] Fix | Delete
$r = apply_filters('themify_before_' . $filter_key . '_parse_args', $r);
[1044] Fix | Delete
}
[1045] Fix | Delete
// Parse
[1046] Fix | Delete
if (is_array($defaults)) {
[1047] Fix | Delete
$r = array_merge($defaults, $r);
[1048] Fix | Delete
}
[1049] Fix | Delete
// Aggressively filter the args after the parse
[1050] Fix | Delete
if (!empty($filter_key)) {
[1051] Fix | Delete
$r = apply_filters('themify_after_' . $filter_key . '_parse_args', $r);
[1052] Fix | Delete
}
[1053] Fix | Delete
// Return the parsed results
[1054] Fix | Delete
return $r;
[1055] Fix | Delete
}
[1056] Fix | Delete
[1057] Fix | Delete
/**
[1058] Fix | Delete
* Display the Builder's backend editor in Themify Custom Panel
[1059] Fix | Delete
*
[1060] Fix | Delete
* @return null
[1061] Fix | Delete
* @since 2.8.8
[1062] Fix | Delete
*/
[1063] Fix | Delete
function themify_meta_field_page_builder() {
[1064] Fix | Delete
do_action('themify_builder_metabox');
[1065] Fix | Delete
}
[1066] Fix | Delete
[1067] Fix | Delete
/**
[1068] Fix | Delete
* Get an array of key => value pairs and outputs them as HTML attributes
[1069] Fix | Delete
*
[1070] Fix | Delete
* @since 2.9.1
[1071] Fix | Delete
* @return string
[1072] Fix | Delete
*/
[1073] Fix | Delete
function themify_get_element_attributes(array $props):string {
[1074] Fix | Delete
$out = '';
[1075] Fix | Delete
foreach ($props as $k => $v) {
[1076] Fix | Delete
$out .= ' ' . $k . '="' . esc_attr($v) . '"';
[1077] Fix | Delete
}
[1078] Fix | Delete
[1079] Fix | Delete
return $out;
[1080] Fix | Delete
}
[1081] Fix | Delete
[1082] Fix | Delete
[1083] Fix | Delete
/**
[1084] Fix | Delete
* Get breakpoints settings
[1085] Fix | Delete
* if it's framework return customizer breakpoints,else if it's builder plugin builder breakpoints
[1086] Fix | Delete
* @since 3.0.0
[1087] Fix | Delete
* @return mixed array/int
[1088] Fix | Delete
*/
[1089] Fix | Delete
function themify_get_breakpoints(string $select = 'all', bool $max_min = false) {
[1090] Fix | Delete
static $res = array();
[1091] Fix | Delete
if (($select === 'all' && empty($res)) || (empty($res[$select]))) {
[1092] Fix | Delete
$breakpoints = array(
[1093] Fix | Delete
'tablet_landscape' => array(769, 1280),
[1094] Fix | Delete
'tablet' => array(681, 768),
[1095] Fix | Delete
'mobile' => 680
[1096] Fix | Delete
);
[1097] Fix | Delete
if ($max_min === true) {
[1098] Fix | Delete
return $breakpoints;
[1099] Fix | Delete
}
[1100] Fix | Delete
foreach ($breakpoints as $bp => $value) {
[1101] Fix | Delete
$v = themify_builder_get('setting-customizer_responsive_design_' . $bp, 'builder_responsive_design_' . $bp);
[1102] Fix | Delete
if ('' != $v) {
[1103] Fix | Delete
if (is_array($value)) {
[1104] Fix | Delete
$res[$bp] = array();
[1105] Fix | Delete
$res[$bp][0] = $value[0];
[1106] Fix | Delete
$res[$bp][1] = (int) $v;
[1107] Fix | Delete
} else {
[1108] Fix | Delete
$res[$bp] = (int) $v;
[1109] Fix | Delete
}
[1110] Fix | Delete
} else {
[1111] Fix | Delete
$res[$bp] = $value;
[1112] Fix | Delete
}
[1113] Fix | Delete
}
[1114] Fix | Delete
$res['tablet'][0] = $res['mobile'] + 1;
[1115] Fix | Delete
$res['tablet_landscape'][0] = $res['tablet'][1] + 1;
[1116] Fix | Delete
}
[1117] Fix | Delete
return 'all' === $select ? $res : $res[$select];
[1118] Fix | Delete
}
[1119] Fix | Delete
[1120] Fix | Delete
/**
[1121] Fix | Delete
* Unserialize data if it is serialized
[1122] Fix | Delete
*
[1123] Fix | Delete
* If PHP supports it disables unserializing PHP objects in order to prevent object injection.
[1124] Fix | Delete
*
[1125] Fix | Delete
* @param string $original Maybe unserialized original, if is needed.
[1126] Fix | Delete
* @return mixed Unserialized data can be any type.
[1127] Fix | Delete
*/
[1128] Fix | Delete
function themify_maybe_unserialize(string $original) {
[1129] Fix | Delete
if (is_serialized($original)) { // don't attempt to unserialize data that wasn't serialized going in
[1130] Fix | Delete
return @unserialize($original, array('allowed_classes' => false));
[1131] Fix | Delete
}
[1132] Fix | Delete
[1133] Fix | Delete
return $original;
[1134] Fix | Delete
}
[1135] Fix | Delete
[1136] Fix | Delete
/**
[1137] Fix | Delete
* Display the post video
[1138] Fix | Delete
* Must be used inside the loop
[1139] Fix | Delete
*
[1140] Fix | Delete
* @since 2.7.3
[1141] Fix | Delete
*/
[1142] Fix | Delete
function themify_post_video(string $url = '', bool $echo = true) {
[1143] Fix | Delete
$video_file = $url ? $url : themify_get('video_url');
[1144] Fix | Delete
$output = '';
[1145] Fix | Delete
if (!empty($video_file)) {
[1146] Fix | Delete
if ('mp4' !== pathinfo($video_file, PATHINFO_EXTENSION)) {
[1147] Fix | Delete
global $wp_embed;
[1148] Fix | Delete
$output = $wp_embed->run_shortcode('[embed]' . $video_file . '[/embed]');
[1149] Fix | Delete
} else {
[1150] Fix | Delete
$output = '<div class="post-video">';
[1151] Fix | Delete
$output .= do_shortcode('[video src="' . $video_file . '"]');
[1152] Fix | Delete
$output .= '</div>';
[1153] Fix | Delete
}
[1154] Fix | Delete
}
[1155] Fix | Delete
if ($echo === true) {
[1156] Fix | Delete
echo $output;
[1157] Fix | Delete
} else {
[1158] Fix | Delete
return $output;
[1159] Fix | Delete
}
[1160] Fix | Delete
}
[1161] Fix | Delete
[1162] Fix | Delete
function themify_get_embed(string $url, array $args):string {
[1163] Fix | Delete
$reg = '#(vimeo\.com|youtu(be\.com|\.be|be))\/(shorts\/|video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?\/?([A-Za-z0-9._%-]*)(\&\S+)?#i';
[1164] Fix | Delete
preg_match($reg, $url, $m);
[1165] Fix | Delete
if (!empty($m) && isset($m[1], $m[4])) {
[1166] Fix | Delete
$type = ($m[1] === 'youtube.com' || strpos($m[1], 'youtu') !== false) ? 'youtube' : ($m[1] === 'vimeo.com' || strpos($m[1], 'vimeo') ? 'vimeo' : false);
[1167] Fix | Delete
if ($type !== false) {
[1168] Fix | Delete
$id = $m[4];
[1169] Fix | Delete
$query_args = array();
[1170] Fix | Delete
if ($type !== 'youtube' && isset($m[6])) {//h query argument should be first in vimeo
[1171] Fix | Delete
$query_args['h'] = $m[6];
[1172] Fix | Delete
}
[1173] Fix | Delete
$query_args += array(
[1174] Fix | Delete
'pip' => 1,
[1175] Fix | Delete
'playsinline' => 1
[1176] Fix | Delete
);
[1177] Fix | Delete
$params = parse_url($url);
[1178] Fix | Delete
if (!empty($params['query'])) {
[1179] Fix | Delete
parse_str($params['query'], $output);
[1180] Fix | Delete
unset($output['v']);
[1181] Fix | Delete
$query_args += $output;
[1182] Fix | Delete
unset($output);
[1183] Fix | Delete
}
[1184] Fix | Delete
if ($type === 'youtube') {
[1185] Fix | Delete
$allow = 'accelerometer;encrypted-media;gyroscope;picture-in-picture;fullscreen';
[1186] Fix | Delete
$src = 'https://www.youtube';
[1187] Fix | Delete
if (!empty($args['privacy'])) {
[1188] Fix | Delete
$src .= '-nocookie';
[1189] Fix | Delete
}
[1190] Fix | Delete
$src .= '.com/embed/' . $id;
[1191] Fix | Delete
if (!empty($args['start']) ) {
[1192] Fix | Delete
$query_args['start'] = (float) $args['start'];
[1193] Fix | Delete
}
[1194] Fix | Delete
elseif (!empty($params['fragment'])) {
[1195] Fix | Delete
$query_args['start'] = (float) $params['fragment'];
[1196] Fix | Delete
if(empty($query_args['start'])){
[1197] Fix | Delete
unset($query_args['start']);
[1198] Fix | Delete
}
[1199] Fix | Delete
}
[1200] Fix | Delete
if (!empty($args['end'])) {
[1201] Fix | Delete
$query_args['end'] = (float) $args['end'];
[1202] Fix | Delete
}
[1203] Fix | Delete
}
[1204] Fix | Delete
else {
[1205] Fix | Delete
[1206] Fix | Delete
$allow = 'fullscreen';
[1207] Fix | Delete
$src = 'https://player.vimeo.com/video/' . $id;
[1208] Fix | Delete
if (!empty($args['start'])) {
[1209] Fix | Delete
$src .= '#t=' . $args['start'];
[1210] Fix | Delete
} elseif (!empty($params['fragment'])) {
[1211] Fix | Delete
$src .= '#' . $params['fragment'];
[1212] Fix | Delete
}
[1213] Fix | Delete
if (!empty($args['privacy'])) {
[1214] Fix | Delete
$query_args['dnt'] = 1;
[1215] Fix | Delete
}
[1216] Fix | Delete
$query_args['byline'] =$query_args['title'] = $query_args['portrait'] = 0;
[1217] Fix | Delete
}
[1218] Fix | Delete
unset(
[1219] Fix | Delete
$params,
[1220] Fix | Delete
$query_args['modestbranding'],
[1221] Fix | Delete
$query_args['controls'],
[1222] Fix | Delete
$query_args['loop'],
[1223] Fix | Delete
$query_args['mute'],
[1224] Fix | Delete
$query_args['muted']
[1225] Fix | Delete
);
[1226] Fix | Delete
if (!empty($args['hide_controls'])) {
[1227] Fix | Delete
$query_args['controls'] = 0;
[1228] Fix | Delete
}
[1229] Fix | Delete
[1230] Fix | Delete
if (!empty($args['loop'])) {
[1231] Fix | Delete
$query_args['loop'] = 1;
[1232] Fix | Delete
if (!isset($query_args['playlist'])) {
[1233] Fix | Delete
$query_args['playlist'] = $id;
[1234] Fix | Delete
}
[1235] Fix | Delete
}
[1236] Fix | Delete
if (!empty($args['autoplay']) || !empty($query_args['autoplay'])) {
[1237] Fix | Delete
$allow .= ';autoplay';
[1238] Fix | Delete
$query_args['autoplay'] = 1;
[1239] Fix | Delete
}
[1240] Fix | Delete
if (!empty($args['muted'])) {
[1241] Fix | Delete
if ($type === 'youtube') {
[1242] Fix | Delete
$query_args['mute'] = 1;
[1243] Fix | Delete
} else {
[1244] Fix | Delete
$query_args['muted'] = 1;
[1245] Fix | Delete
}
[1246] Fix | Delete
}
[1247] Fix | Delete
$lazy = !empty($args['disable_lazy']) ? ' data-no-script' : '';
[1248] Fix | Delete
$src .= '?' . http_build_query($query_args);
[1249] Fix | Delete
$class=isset($args['class'])?$args['class']:'tf_abs tf_w tf_h';
[1250] Fix | Delete
return '<iframe' . $lazy . ' src="' . $src . '" allow="' . $allow . '" class="'.$class.'"></iframe>';
[1251] Fix | Delete
}
[1252] Fix | Delete
}
[1253] Fix | Delete
return '';
[1254] Fix | Delete
}
[1255] Fix | Delete
[1256] Fix | Delete
function themify_enque_style(string $handle,string $src = '',?array $deps = array(),?string $ver = THEMIFY_VERSION,?string $media = 'all', bool $in_footer = false) {
[1257] Fix | Delete
Themify_Enqueue_Assets::add_css($handle, $src, $deps, $ver, $media, $in_footer);
[1258] Fix | Delete
}
[1259] Fix | Delete
[1260] Fix | Delete
function themify_enque_script(string $handle, string $src = '', string $ver = THEMIFY_VERSION,?array $deps = array(), bool $in_footer = true) {
[1261] Fix | Delete
Themify_Enqueue_Assets::add_js($handle, $src, $deps, $ver, $in_footer);
[1262] Fix | Delete
}
[1263] Fix | Delete
[1264] Fix | Delete
if (!function_exists('themify_get_query_categories')) {
[1265] Fix | Delete
[1266] Fix | Delete
function themify_get_query_categories():array {
[1267] Fix | Delete
global $themify;
[1268] Fix | Delete
[1269] Fix | Delete
$taxes = $themify->query_category == '0' ? themify_get_all_terms_ids($themify->query_taxonomy) : explode(',', str_replace(' ', '', $themify->query_category));
[1270] Fix | Delete
if (empty($taxes) || is_wp_error($taxes)) {
[1271] Fix | Delete
$taxes= array();
[1272] Fix | Delete
}
[1273] Fix | Delete
return $taxes;
[1274] Fix | Delete
}
[1275] Fix | Delete
[1276] Fix | Delete
}
[1277] Fix | Delete
[1278] Fix | Delete
/**
[1279] Fix | Delete
* Returns the URL to the WooCommerce Shop page
[1280] Fix | Delete
*
[1281] Fix | Delete
* @return string
[1282] Fix | Delete
* @since 4.5.7
[1283] Fix | Delete
*/
[1284] Fix | Delete
function themify_get_shop_permalink():string {
[1285] Fix | Delete
static $link = null;
[1286] Fix | Delete
if ($link === null) {
[1287] Fix | Delete
$id = themify_shop_pageId();
[1288] Fix | Delete
$link = !empty($id) ? get_permalink($id) : '';
[1289] Fix | Delete
}
[1290] Fix | Delete
return $link;
[1291] Fix | Delete
}
[1292] Fix | Delete
[1293] Fix | Delete
function themify_is_login_page():bool {
[1294] Fix | Delete
static $is = null;
[1295] Fix | Delete
if ($is === null) {
[1296] Fix | Delete
global $pagenow;
[1297] Fix | Delete
$is = !empty($pagenow) && in_array($pagenow, array('wp-login.php', 'wp-register.php'), true);
[1298] Fix | Delete
}
[1299] Fix | Delete
return $is;
[1300] Fix | Delete
}
[1301] Fix | Delete
[1302] Fix | Delete
function themify_is_ajax():bool {
[1303] Fix | Delete
static $is = null;
[1304] Fix | Delete
if ($is === null) {
[1305] Fix | Delete
$is = defined('DOING_AJAX') || (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
[1306] Fix | Delete
}
[1307] Fix | Delete
return $is;
[1308] Fix | Delete
}
[1309] Fix | Delete
[1310] Fix | Delete
function themify_is_rest():bool {
[1311] Fix | Delete
static $is = null;
[1312] Fix | Delete
if ($is === null) {
[1313] Fix | Delete
$is = (defined('REST_REQUEST') && REST_REQUEST) || strpos($_SERVER['REQUEST_URI'], '/wp-json/') !== false;
[1314] Fix | Delete
}
[1315] Fix | Delete
return $is;
[1316] Fix | Delete
}
[1317] Fix | Delete
[1318] Fix | Delete
function themify_is_lazyloading():bool {
[1319] Fix | Delete
static $is = null;
[1320] Fix | Delete
if ($is === null) {
[1321] Fix | Delete
$is = !themify_builder_check('setting-disable-lazy', 'performance-disable-lazy', true);
[1322] Fix | Delete
if ($is === true) {
[1323] Fix | Delete
global $wp_customize;
[1324] Fix | Delete
$is = !is_admin() && themify_is_ajax() === false && !isset($_GET['tf-scroll']) && !isset($_GET['post_in_lightbox']) && themify_is_prefetch_request() === false && (!class_exists('Themify_Builder',false) || !Themify_Builder_Model::is_front_builder_activate()) && !( $wp_customize instanceof WP_Customize_Manager && $wp_customize->is_preview());
[1325] Fix | Delete
if ($is === true) {
[1326] Fix | Delete
$is = apply_filters('tf_lazy_enable', true);
[1327] Fix | Delete
}
[1328] Fix | Delete
} else {
[1329] Fix | Delete
add_filter('wp_lazy_loading_enabled', '__return_false', 100);
[1330] Fix | Delete
}
[1331] Fix | Delete
}
[1332] Fix | Delete
return $is;
[1333] Fix | Delete
}
[1334] Fix | Delete
[1335] Fix | Delete
function themify_make_lazy(?string $html, bool $load = true):?string {//@todo move to class
[1336] Fix | Delete
if (isset($html) && (strpos($html, ' src=') !== false || strpos($html, '<audio') !== false || strpos($html, '<video') !== false)) {
[1337] Fix | Delete
$tags = array(
[1338] Fix | Delete
'img' => '<img.+?>',
[1339] Fix | Delete
'iframe' => '<iframe.+?>.*?<\/iframe>',
[1340] Fix | Delete
'audio' => '<audio.+?>.*?<\/audio>',
[1341] Fix | Delete
'video' => '<video.+?>.*?<\/video>'
[1342] Fix | Delete
);
[1343] Fix | Delete
$hasLazy = themify_is_lazyloading();
[1344] Fix | Delete
if($hasLazy===false){
[1345] Fix | Delete
unset($tags['img'],$tags['iframe']);
[1346] Fix | Delete
}
[1347] Fix | Delete
foreach ($tags as $k => $v) {
[1348] Fix | Delete
if (strpos($html, '<' . $k) === false) {
[1349] Fix | Delete
unset($tags[$k]);
[1350] Fix | Delete
}
[1351] Fix | Delete
}
[1352] Fix | Delete
if (empty($tags)) {
[1353] Fix | Delete
return $html;
[1354] Fix | Delete
}
[1355] Fix | Delete
if (isset($tags['img']) || isset($tags['iframe'])) {//skip noscript img/iframe
[1356] Fix | Delete
preg_match_all('/<noscript>.*?<\/noscript>/is', $html, $m);
[1357] Fix | Delete
if (!empty($m[0])) {
[1358] Fix | Delete
$search = $replace = array();
[1359] Fix | Delete
$m = !is_array($m[0]) ? array($m[0]) : $m[0];
[1360] Fix | Delete
foreach ($m as $item) {
[1361] Fix | Delete
$orig = $item;
[1362] Fix | Delete
$item = str_replace(array("\r" . 'src=', "\n" . 'src='), ' src=', $item);
[1363] Fix | Delete
if (strpos($item, ' src=') !== false && strpos($item, 'data-no-script') === false && (strpos($item, '<img') !== false || strpos($item, '<iframe') !== false)) {
[1364] Fix | Delete
$search[] = $orig;
[1365] Fix | Delete
$replace[] = str_replace(' src=', ' data-no-script src=', $item);
[1366] Fix | Delete
}
[1367] Fix | Delete
}
[1368] Fix | Delete
unset($m);
[1369] Fix | Delete
if (!empty($search)) {
[1370] Fix | Delete
$html = str_replace($search, $replace, $html);
[1371] Fix | Delete
}
[1372] Fix | Delete
}
[1373] Fix | Delete
}
[1374] Fix | Delete
[1375] Fix | Delete
$reg = '/' . implode('|', $tags) . '/is';
[1376] Fix | Delete
preg_match_all($reg, $html, $matches);
[1377] Fix | Delete
unset($reg);
[1378] Fix | Delete
if (!empty($matches[0])) {
[1379] Fix | Delete
$svgRows=4;
[1380] Fix | Delete
$svgStep=round(100/$svgRows,2);
[1381] Fix | Delete
$count = 0;
[1382] Fix | Delete
$search = $replace = array();
[1383] Fix | Delete
$matches = !is_array($matches[0]) ? array($matches[0]) : $matches[0];
[1384] Fix | Delete
$tags = array_keys($tags);
[1385] Fix | Delete
$extCount = count($tags) - 1;
[1386] Fix | Delete
$placeHolder="data:image/svg+xml,%3Csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width='{w}'%20height='{h}'%20viewBox=%270%200%20{w}%20{h}%27%3E%3C/svg%3E";
[1387] Fix | Delete
if ($load === false) {//$load need for some modules,which should be init and than load images(e.g slider)
[1388] Fix | Delete
$stopLazy = false;
[1389] Fix | Delete
$useJs = $isJsLazy=true;
[1390] Fix | Delete
}
[1391] Fix | Delete
else{
[1392] Fix | Delete
$_WITHOUTLAZY_ =2;
[1393] Fix | Delete
$stopLazy = $useJs =$isJsLazy= false;
[1394] Fix | Delete
}
[1395] Fix | Delete
foreach ($matches as $item) {
[1396] Fix | Delete
if (!empty($item) && strpos($item, 'data-lazy', 4) === false && strpos($item, 'data-tf-src', 4) === false && strpos($item, 'data-no-script', 4) === false && strpos($item, 'data:image/', 4) === false && strpos($item, 'display:none', 4) === false && strpos($item, 'application/x-mpegURL', 4) === false && strpos($item, 'display: none', 4) === false && ($count !== 0 || strpos($item, 'gravatar.com', 4) === false)) {
[1397] Fix | Delete
if (strpos($item, 'data-tf-not-load', 4) === false) {
[1398] Fix | Delete
for ($i = $extCount; $i > -1; --$i) {
[1399] Fix | Delete
if (strpos($item, '<' . $tags[$i]) !== false) {
[1400] Fix | Delete
$ext = $tags[$i];
[1401] Fix | Delete
break;
[1402] Fix | Delete
}
[1403] Fix | Delete
}
[1404] Fix | Delete
if (!isset($ext)) {
[1405] Fix | Delete
continue;
[1406] Fix | Delete
}
[1407] Fix | Delete
$orig = $item;
[1408] Fix | Delete
$item = preg_replace('/\s+/', ' ', $item);
[1409] Fix | Delete
if ($ext !== 'audio') {
[1410] Fix | Delete
preg_match('/ src=["\']([^"]+?)["\']/', $item, $image_src,0,4);
[1411] Fix | Delete
}
[1412] Fix | Delete
if ($ext === 'audio' || $ext === 'video' || !empty($image_src[1])) {
[1413] Fix | Delete
$url = $ext === 'audio' ? true : (isset($image_src[1]) ? trim($image_src[1]) : '');
[1414] Fix | Delete
unset($image_src);
[1415] Fix | Delete
if ($url === '' && $ext === 'video') {
[1416] Fix | Delete
$url = true;
[1417] Fix | Delete
}
[1418] Fix | Delete
if ($url !== '') {
[1419] Fix | Delete
if ($url !== true && $url[0] === '{') {
[1420] Fix | Delete
continue;
[1421] Fix | Delete
}
[1422] Fix | Delete
if ($ext === 'img') {//skip large images converting,otherwise can crash the site
[1423] Fix | Delete
if (strpos($item, ' srcset', 4) !== false) {
[1424] Fix | Delete
preg_match('/ srcset=["\']([^"]+?)["\']/', $item, $srcset,0,4);
[1425] Fix | Delete
$srcset=$srcset[1]??'';
[1426] Fix | Delete
}else{
[1427] Fix | Delete
$srcset='';
[1428] Fix | Delete
}
[1429] Fix | Delete
if ($count === 0) {
[1430] Fix | Delete
$srcSetSizes='';
[1431] Fix | Delete
if ($srcset!=='') {
[1432] Fix | Delete
preg_match('/ sizes=["\']([^"]+?)["\']/', $item, $srcSetSizes,0,4);
[1433] Fix | Delete
$srcSetSizes = $srcSetSizes[1] ?? '';
[1434] Fix | Delete
}
[1435] Fix | Delete
Themify_Enqueue_Assets::addPreLoadMedia($url, 'preload', 'image', $srcset, $srcSetSizes, 'high'); //load the first images in the page with preload for fast LCP
[1436] Fix | Delete
unset($srcSetSizes);
[1437] Fix | Delete
}
[1438] Fix | Delete
if(strpos($item, 'tf_large_img') === false){
[1439] Fix | Delete
themify_generateWebp($url);
[1440] Fix | Delete
if ($srcset!=='') {
[1441] Fix | Delete
foreach ( explode(',', trim($srcset)) as $_src) {
[1442] Fix | Delete
$tmpS = trim(explode(' ', trim($_src))[0]);
[1443] Fix | Delete
if ($tmpS !== '' && strpos($tmpS, 'data:image') === false) {
[1444] Fix | Delete
themify_generateWebp($tmpS);
[1445] Fix | Delete
}
[1446] Fix | Delete
}
[1447] Fix | Delete
unset($tmpS,$srcset,$_src);
[1448] Fix | Delete
}
[1449] Fix | Delete
if (strpos($item, ' data-src', 4) !== false) {
[1450] Fix | Delete
preg_match('/ data-src=["\']([^"]+?)["\']/', $item, $tmpsrc,0,4);
[1451] Fix | Delete
if (!empty($tmpsrc[1])) {
[1452] Fix | Delete
themify_generateWebp($tmpsrc[1]);
[1453] Fix | Delete
}
[1454] Fix | Delete
$tmpsrc = null;
[1455] Fix | Delete
}
[1456] Fix | Delete
}
[1457] Fix | Delete
}
[1458] Fix | Delete
if (strpos($item, 'data-src', 4) !== false || ($hasLazy === false && $ext !== 'audio' && $ext !== 'video')) {
[1459] Fix | Delete
continue;
[1460] Fix | Delete
}
[1461] Fix | Delete
$s = '';
[1462] Fix | Delete
if ($ext === 'audio' || $ext === 'video') {
[1463] Fix | Delete
$s = ' data-lazy="1"';
[1464] Fix | Delete
if (strpos($item, 'preload="none"', 6) === false) {
[1465] Fix | Delete
$s .= ' preload="none"';
[1466] Fix | Delete
$item = str_replace(array('preload="auto"', 'preload="metadata"'), '', $item);
[1467] Fix | Delete
}
[1468] Fix | Delete
} else {
[1469] Fix | Delete
if($isJsLazy===false) {
[1470] Fix | Delete
$stopLazy = $count < $_WITHOUTLAZY_; /* skip the first $_WITHOUTLAZY_ matches, assume they're above the fold */
[1471] Fix | Delete
$useJs = $count > 9;
[1472] Fix | Delete
++$count;
[1473] Fix | Delete
}
[1474] Fix | Delete
if ($ext === 'iframe') {
[1475] Fix | Delete
if ($stopLazy === false) {
[1476] Fix | Delete
if (strpos($item, ' loading=', 6) === false) {
[1477] Fix | Delete
$s .= ' loading="lazy"';
[1478] Fix | Delete
}
[1479] Fix | Delete
if ($isJsLazy === true) {
[1480] Fix | Delete
$s .= ' data-lazy="1" src="about:blank" data-tf-not-load="1"';
[1481] Fix | Delete
$class = 'tf_iframe_lazy';
[1482] Fix | Delete
if (strpos($item, 'class=', 6) === false) {
[1483] Fix | Delete
$s .= ' class="' . $class . '"';
[1484] Fix | Delete
} else {
[1485] Fix | Delete
$item = str_replace(' class="', ' class="' . $class . ' ', $item);
[1486] Fix | Delete
}
[1487] Fix | Delete
$item = strtr($item, array(' src=' => ' data-tf-src='));
[1488] Fix | Delete
}
[1489] Fix | Delete
}
[1490] Fix | Delete
else {
[1491] Fix | Delete
$s .= ' data-tf-not-load="1"';
[1492] Fix | Delete
}
[1493] Fix | Delete
}
[1494] Fix | Delete
elseif ($ext === 'img') {
[1495] Fix | Delete
$sizes = themify_get_image_size($url,false,$stopLazy===false && $useJs===true?$svgRows:0);
[1496] Fix | Delete
if ($stopLazy === false) {
[1497] Fix | Delete
$useJs = $isJsLazy === true || $useJs === true;
[1498] Fix | Delete
if (strpos($item, ' loading=', 4) === false) {
[1499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function