| Server IP : 85.155.190.233 / Your IP : 216.73.216.103 Web Server : nginx/1.24.0 System : Linux antigravity-cli 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64 User : wp-moonbloom ( 1001) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/moonbloom/wp-content/mu-plugins/ |
Upload File : |
<?php
/**
* MoonBloom WebP delivery.
* Wraps every <img> whose uploads .jpg/.png has a sibling .webp into
* <picture><source type="image/webp"> ... </picture>. Browser picks WebP if supported,
* else falls back to original. Off in admin / feeds (feeds keep .jpg for Google Shopping).
*/
add_action( 'template_redirect', function () {
if ( is_admin() || is_feed() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) {
return;
}
ob_start( 'moonbloom_webp_rewrite' );
} );
function moonbloom_webp_to_path( $url ) {
$pos = strpos( $url, '/wp-content/uploads/' );
if ( $pos === false ) {
return null;
}
$rel = substr( $url, $pos + strlen( '/wp-content/uploads/' ) );
$rel = preg_replace( '#[?\#].*$#', '', $rel );
return WP_CONTENT_DIR . '/uploads/' . $rel;
}
function moonbloom_webp_swap_url( $url ) {
if ( ! preg_match( '#\.(jpe?g|png)(\?.*)?$#i', $url ) ) {
return null;
}
$webp_url = preg_replace( '#\.(jpe?g|png)(\?.*)?$#i', '.webp', $url );
$webp_path = moonbloom_webp_to_path( $webp_url );
return ( $webp_path && file_exists( $webp_path ) ) ? $webp_url : null;
}
function moonbloom_webp_rewrite( $html ) {
if ( stripos( $html, '<img' ) === false ) {
return $html;
}
return preg_replace_callback( '#<img\s[^>]*>#i', function ( $m ) {
$img = $m[0];
if ( stripos( $img, '/wp-content/uploads/' ) === false ) {
return $img;
}
$webp_srcset = null;
if ( preg_match( '#\ssrcset=(["\x27])(.*?)\1#i', $img, $sm ) ) {
$parts = array_map( 'trim', explode( ',', $sm[2] ) );
$out = array();
$any = false;
foreach ( $parts as $p ) {
$seg = preg_split( '#\s+#', $p, 2 );
$w = moonbloom_webp_swap_url( $seg[0] );
if ( $w ) {
$any = true;
$out[] = $w . ( isset( $seg[1] ) ? ' ' . $seg[1] : '' );
} else {
$out[] = $p;
}
}
if ( $any ) {
$webp_srcset = implode( ', ', $out );
}
}
if ( ! $webp_srcset && preg_match( '#\ssrc=(["\x27])(.*?)\1#i', $img, $cm ) ) {
$w = moonbloom_webp_swap_url( $cm[2] );
if ( $w ) {
$webp_srcset = $w;
}
}
if ( ! $webp_srcset ) {
return $img;
}
$sizes = '';
if ( preg_match( '#\ssizes=(["\x27])(.*?)\1#i', $img, $zm ) ) {
$sizes = ' sizes="' . esc_attr( $zm[2] ) . '"';
}
return '<picture><source type="image/webp" srcset="' . esc_attr( $webp_srcset ) . '"' . $sizes . '>' . $img . '</picture>';
}, $html );
}