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
/home/sportsfe.../httpdocs/wp-conte.../plugins/wp-smush.../core/modules
File: class-webp.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* WebP class: WebP
[2] Fix | Delete
*
[3] Fix | Delete
* @package Smush\Core\Modules
[4] Fix | Delete
* @since 3.8.0
[5] Fix | Delete
*/
[6] Fix | Delete
[7] Fix | Delete
namespace Smush\Core\Modules;
[8] Fix | Delete
[9] Fix | Delete
use Smush\Core\Core;
[10] Fix | Delete
use Smush\Core\Helper;
[11] Fix | Delete
use Smush\Core\Stats\Global_Stats;
[12] Fix | Delete
use WP_Error;
[13] Fix | Delete
use WP_Smush;
[14] Fix | Delete
[15] Fix | Delete
if ( ! defined( 'WPINC' ) ) {
[16] Fix | Delete
die;
[17] Fix | Delete
}
[18] Fix | Delete
[19] Fix | Delete
/**
[20] Fix | Delete
* Class WebP extends Abstract_Module.
[21] Fix | Delete
*/
[22] Fix | Delete
class WebP extends Abstract_Module {
[23] Fix | Delete
[24] Fix | Delete
/**
[25] Fix | Delete
* Module slug.
[26] Fix | Delete
*
[27] Fix | Delete
* @var string
[28] Fix | Delete
*/
[29] Fix | Delete
protected $slug = 'webp_mod';
[30] Fix | Delete
[31] Fix | Delete
/**
[32] Fix | Delete
* Whether module is pro or not.
[33] Fix | Delete
*
[34] Fix | Delete
* @var string
[35] Fix | Delete
*/
[36] Fix | Delete
protected $is_pro = true;
[37] Fix | Delete
[38] Fix | Delete
/**
[39] Fix | Delete
* If server is configured for webp
[40] Fix | Delete
*
[41] Fix | Delete
* @access private
[42] Fix | Delete
* @var bool $is_configured
[43] Fix | Delete
*/
[44] Fix | Delete
private $is_configured;
[45] Fix | Delete
[46] Fix | Delete
/**
[47] Fix | Delete
* Initialize the module.
[48] Fix | Delete
*/
[49] Fix | Delete
public function init() {
[50] Fix | Delete
// Show success message after deleting all webp images.
[51] Fix | Delete
add_action( 'wp_smush_header_notices', array( $this, 'maybe_show_notices' ) );
[52] Fix | Delete
[53] Fix | Delete
// Only apply filters for PRO + activated Webp.
[54] Fix | Delete
if ( $this->is_active() ) {
[55] Fix | Delete
// Add a filter to check if the image should resmush.
[56] Fix | Delete
//add_filter( 'wp_smush_should_resmush', array( $this, 'should_resmush' ), 10, 2 );
[57] Fix | Delete
}
[58] Fix | Delete
}
[59] Fix | Delete
[60] Fix | Delete
/**
[61] Fix | Delete
* Enables and disables the WebP module.
[62] Fix | Delete
*
[63] Fix | Delete
* @since 3.8.0
[64] Fix | Delete
*
[65] Fix | Delete
* @param boolean $enable Whether to enable or disable WebP.
[66] Fix | Delete
*/
[67] Fix | Delete
public function toggle_webp( $enable = true ) {
[68] Fix | Delete
$this->settings->set( $this->slug, $enable );
[69] Fix | Delete
[70] Fix | Delete
global $wp_filesystem;
[71] Fix | Delete
if ( is_null( $wp_filesystem ) ) {
[72] Fix | Delete
// These aren't included when applying a config from the Hub.
[73] Fix | Delete
if ( ! function_exists( 'WP_Filesystem' ) ) {
[74] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/file.php';
[75] Fix | Delete
}
[76] Fix | Delete
WP_Filesystem();
[77] Fix | Delete
}
[78] Fix | Delete
[79] Fix | Delete
$parsed_udir = $this->get_upload_dir();
[80] Fix | Delete
$flag_file_path = $parsed_udir['webp_path'] . '/disable_smush_webp';
[81] Fix | Delete
[82] Fix | Delete
// Handle the file used as a flag by the server rules.
[83] Fix | Delete
if ( $enable ) {
[84] Fix | Delete
$wp_filesystem->delete( $flag_file_path, true );
[85] Fix | Delete
} else {
[86] Fix | Delete
$wp_filesystem->put_contents( $flag_file_path, '' );
[87] Fix | Delete
}
[88] Fix | Delete
}
[89] Fix | Delete
[90] Fix | Delete
/**
[91] Fix | Delete
* Gets whether WebP is configured, returning a message to display when it's not.
[92] Fix | Delete
* This is a wrapper for displaying a message on failure which is used in three places.
[93] Fix | Delete
* Moved here to reduce the redundancy.
[94] Fix | Delete
*
[95] Fix | Delete
* @since 3.8.8
[96] Fix | Delete
*
[97] Fix | Delete
* @param bool $force Force check.
[98] Fix | Delete
*
[99] Fix | Delete
* @return true|string True when it's configured. String when it's not.
[100] Fix | Delete
*/
[101] Fix | Delete
public function get_is_configured_with_error_message( $force = false ) {
[102] Fix | Delete
$is_configured = $this->is_configured( $force );
[103] Fix | Delete
[104] Fix | Delete
if ( true === $is_configured ) {
[105] Fix | Delete
return true;
[106] Fix | Delete
}
[107] Fix | Delete
[108] Fix | Delete
if ( is_wp_error( $is_configured ) ) {
[109] Fix | Delete
return $is_configured->get_error_message();
[110] Fix | Delete
}
[111] Fix | Delete
if ( 'apache' === $this->get_server_type() && $this->is_htaccess_written() ) {
[112] Fix | Delete
return __( "The server rules have been applied but the server doesn't seem to be serving your images as WebP. We recommend contacting your hosting provider to learn more about the cause of this issue.", 'wp-smushit' );
[113] Fix | Delete
}
[114] Fix | Delete
[115] Fix | Delete
return __( "Server configurations haven't been applied yet. Make configurations to start serving images in WebP format.", 'wp-smushit' );
[116] Fix | Delete
}
[117] Fix | Delete
[118] Fix | Delete
/**
[119] Fix | Delete
* Get status of server configuration for webp.
[120] Fix | Delete
*
[121] Fix | Delete
* @since 3.8.0
[122] Fix | Delete
*
[123] Fix | Delete
* @param bool $force force to recheck.
[124] Fix | Delete
*
[125] Fix | Delete
* @return bool|WP_Error
[126] Fix | Delete
*/
[127] Fix | Delete
public function is_configured( $force = false ) {
[128] Fix | Delete
if ( ! is_null( $this->is_configured ) && ! $force ) {
[129] Fix | Delete
return $this->is_configured;
[130] Fix | Delete
}
[131] Fix | Delete
[132] Fix | Delete
$this->is_configured = $this->check_server_config();
[133] Fix | Delete
[134] Fix | Delete
return $this->is_configured;
[135] Fix | Delete
}
[136] Fix | Delete
[137] Fix | Delete
/**
[138] Fix | Delete
* Check if server is configured to serve webp image.
[139] Fix | Delete
*
[140] Fix | Delete
* @since 3.8.0
[141] Fix | Delete
*
[142] Fix | Delete
* @return bool|WP_Error
[143] Fix | Delete
*/
[144] Fix | Delete
private function check_server_config() {
[145] Fix | Delete
$files_created = $this->create_test_files();
[146] Fix | Delete
[147] Fix | Delete
// WebP test images couldn't be created.
[148] Fix | Delete
if ( true !== $files_created ) {
[149] Fix | Delete
$message = sprintf(
[150] Fix | Delete
/* translators: path that couldn't be written */
[151] Fix | Delete
__( 'We couldn\'t create the WebP test files. This is probably due to your current folder permissions. Please adjust the permissions for "%s" to 755 and try again.', 'wp-smushit' ),
[152] Fix | Delete
$files_created
[153] Fix | Delete
);
[154] Fix | Delete
return new WP_Error( 'test_files_not_created', $message );
[155] Fix | Delete
}
[156] Fix | Delete
[157] Fix | Delete
$udir = $this->get_upload_dir();
[158] Fix | Delete
$test_image = $udir['upload_url'] . '/smush-webp-test.png';
[159] Fix | Delete
[160] Fix | Delete
$args = array(
[161] Fix | Delete
'timeout' => 10,
[162] Fix | Delete
'headers' => array(
[163] Fix | Delete
'Accept' => 'image/webp',
[164] Fix | Delete
),
[165] Fix | Delete
);
[166] Fix | Delete
[167] Fix | Delete
// Add support for basic auth in WPMU DEV staging.
[168] Fix | Delete
if ( isset( $_SERVER['WPMUDEV_HOSTING_ENV'] ) && 'staging' === $_SERVER['WPMUDEV_HOSTING_ENV'] && isset( $_SERVER['PHP_AUTH_USER'] ) ) {
[169] Fix | Delete
$args['headers']['Authorization'] = 'Basic ' . base64_encode( wp_unslash( $_SERVER['PHP_AUTH_USER'] ) . ':' . wp_unslash( $_SERVER['PHP_AUTH_PW'] ) );
[170] Fix | Delete
}
[171] Fix | Delete
[172] Fix | Delete
$response = wp_remote_get( $test_image, $args );
[173] Fix | Delete
[174] Fix | Delete
// If there is an error, return.
[175] Fix | Delete
if ( is_wp_error( $response ) ) {
[176] Fix | Delete
return $response;
[177] Fix | Delete
}
[178] Fix | Delete
[179] Fix | Delete
$code = wp_remote_retrieve_response_code( $response );
[180] Fix | Delete
[181] Fix | Delete
// Check the image's format when the request was successful.
[182] Fix | Delete
if ( 200 === $code ) {
[183] Fix | Delete
$content_type = wp_remote_retrieve_header( $response, 'content-type' );
[184] Fix | Delete
return 'image/webp' === $content_type;
[185] Fix | Delete
}
[186] Fix | Delete
[187] Fix | Delete
// Return the response code and message otherwise.
[188] Fix | Delete
$error_message = sprintf(
[189] Fix | Delete
/* translators: 1. error code, 2. error message. */
[190] Fix | Delete
__( "We couldn't check the WebP server rules status because there was an error with the test request. Please contact support for assistance. Code %1\$s: %2\$s.", 'wp-smushit' ),
[191] Fix | Delete
$code,
[192] Fix | Delete
wp_remote_retrieve_response_message( $response )
[193] Fix | Delete
);
[194] Fix | Delete
[195] Fix | Delete
return new WP_Error( $code, $error_message );
[196] Fix | Delete
}
[197] Fix | Delete
[198] Fix | Delete
/**
[199] Fix | Delete
* Code to use on Nginx servers.
[200] Fix | Delete
*
[201] Fix | Delete
* @since 3.8.0
[202] Fix | Delete
*
[203] Fix | Delete
* @param bool $marker whether to wrap code with marker comment lines.
[204] Fix | Delete
* @return string
[205] Fix | Delete
*/
[206] Fix | Delete
public function get_nginx_code( $marker = true ) {
[207] Fix | Delete
$udir = $this->get_upload_dir();
[208] Fix | Delete
[209] Fix | Delete
$base = trailingslashit( dirname( $udir['upload_rel_path'] ) );
[210] Fix | Delete
$directory = trailingslashit( basename( $udir['upload_rel_path'] ) );
[211] Fix | Delete
$regex_base = $base . '(' . $directory . ')';
[212] Fix | Delete
[213] Fix | Delete
/**
[214] Fix | Delete
* We often need to remove WebP file extension from Nginx cache rule in order to make Smush WebP work,
[215] Fix | Delete
* so always add expiry header rule for Nginx.
[216] Fix | Delete
*
[217] Fix | Delete
* @since 3.9.8
[218] Fix | Delete
* @see https://incsub.atlassian.net/browse/SMUSH-1072
[219] Fix | Delete
*/
[220] Fix | Delete
[221] Fix | Delete
$code = 'location ~* "' . str_replace( '/', '\/', $regex_base ) . '(.*\.(?:png|jpe?g))" {
[222] Fix | Delete
add_header Vary Accept;
[223] Fix | Delete
set $image_path $2;
[224] Fix | Delete
if (-f "' . $udir['webp_path'] . '/disable_smush_webp") {
[225] Fix | Delete
break;
[226] Fix | Delete
}
[227] Fix | Delete
if ($http_accept !~* "webp") {
[228] Fix | Delete
break;
[229] Fix | Delete
}
[230] Fix | Delete
expires max;
[231] Fix | Delete
try_files /' . trailingslashit( $udir['webp_rel_path'] ) . '$image_path.webp $uri =404;
[232] Fix | Delete
}';
[233] Fix | Delete
[234] Fix | Delete
if ( true === $marker ) {
[235] Fix | Delete
$code = $this->marker_line() . "\n" . $code;
[236] Fix | Delete
$code = $code . "\n" . $this->marker_line( true );
[237] Fix | Delete
}
[238] Fix | Delete
return apply_filters( 'smush_nginx_webp_rules', $code );
[239] Fix | Delete
}
[240] Fix | Delete
[241] Fix | Delete
/**
[242] Fix | Delete
* Code to use on Apache servers.
[243] Fix | Delete
*
[244] Fix | Delete
* @since 3.8.0
[245] Fix | Delete
*
[246] Fix | Delete
* @todo Find out what's wrong with the rules. We shouldn't need these two different RewriteRule.
[247] Fix | Delete
*
[248] Fix | Delete
* @param string $location Where the .htaccess file is.
[249] Fix | Delete
*
[250] Fix | Delete
* @return string
[251] Fix | Delete
*/
[252] Fix | Delete
private function get_apache_code( $location ) {
[253] Fix | Delete
$udir = $this->get_upload_dir();
[254] Fix | Delete
[255] Fix | Delete
$rewrite_path = '%{DOCUMENT_ROOT}/' . $udir['webp_rel_path'];
[256] Fix | Delete
[257] Fix | Delete
$code = '<IfModule mod_rewrite.c>
[258] Fix | Delete
RewriteEngine On
[259] Fix | Delete
RewriteCond ' . $rewrite_path . '/disable_smush_webp !-f
[260] Fix | Delete
RewriteCond %{HTTP_ACCEPT} image/webp' . "\n";
[261] Fix | Delete
[262] Fix | Delete
if ( 'root' === $location ) {
[263] Fix | Delete
// This works on single sites at root.
[264] Fix | Delete
$code .= ' RewriteCond ' . $rewrite_path . '/$1.webp -f
[265] Fix | Delete
RewriteRule ' . $udir['upload_rel_path'] . '/(.*\.(?:png|jpe?g))$ ' . $udir['webp_rel_path'] . '/$1.webp [NC,T=image/webp]';
[266] Fix | Delete
} else {
[267] Fix | Delete
// This works at /uploads/.
[268] Fix | Delete
$code .= ' RewriteCond ' . $rewrite_path . '/$1.$2.webp -f
[269] Fix | Delete
RewriteRule ^/?(.+)\.(jpe?g|png)$ /' . $udir['webp_rel_path'] . '/$1.$2.webp [NC,T=image/webp]';
[270] Fix | Delete
}
[271] Fix | Delete
[272] Fix | Delete
$code .= "\n" . '</IfModule>
[273] Fix | Delete
[274] Fix | Delete
<IfModule mod_headers.c>
[275] Fix | Delete
Header append Vary Accept env=WEBP_image
[276] Fix | Delete
</IfModule>
[277] Fix | Delete
[278] Fix | Delete
<IfModule mod_mime.c>
[279] Fix | Delete
AddType image/webp .webp
[280] Fix | Delete
</IfModule>';
[281] Fix | Delete
[282] Fix | Delete
return apply_filters( 'smush_apache_webp_rules', $code );
[283] Fix | Delete
}
[284] Fix | Delete
[285] Fix | Delete
/**
[286] Fix | Delete
* Gets the apache rules for printing them in the config tab.
[287] Fix | Delete
*
[288] Fix | Delete
* @since 3.8.4
[289] Fix | Delete
*
[290] Fix | Delete
* @return string
[291] Fix | Delete
*/
[292] Fix | Delete
public function get_apache_code_to_print() {
[293] Fix | Delete
$location = is_multisite() ? 'uploads' : 'root';
[294] Fix | Delete
[295] Fix | Delete
$code = $this->marker_line() . "\n";
[296] Fix | Delete
$code .= $this->get_apache_code( $location );
[297] Fix | Delete
$code .= "\n" . $this->marker_line( true );
[298] Fix | Delete
[299] Fix | Delete
return $code;
[300] Fix | Delete
}
[301] Fix | Delete
[302] Fix | Delete
/**
[303] Fix | Delete
* Retrieves uploads directory and WebP directory information.
[304] Fix | Delete
* All paths and urls do not have trailing slash.
[305] Fix | Delete
*
[306] Fix | Delete
* @return array
[307] Fix | Delete
*/
[308] Fix | Delete
public function get_upload_dir() {
[309] Fix | Delete
static $upload_dir_info;
[310] Fix | Delete
if ( isset( $upload_dir_info ) ) {
[311] Fix | Delete
return $upload_dir_info;
[312] Fix | Delete
}
[313] Fix | Delete
[314] Fix | Delete
if ( ! is_multisite() || is_main_site() ) {
[315] Fix | Delete
$upload = wp_upload_dir();
[316] Fix | Delete
} else {
[317] Fix | Delete
// Use the main site's upload directory for all subsite's webp converted images.
[318] Fix | Delete
// This makes it easier to have a single rule on the server configs for serving webp in mu.
[319] Fix | Delete
$blog_id = get_main_site_id();
[320] Fix | Delete
switch_to_blog( $blog_id );
[321] Fix | Delete
$upload = wp_upload_dir();
[322] Fix | Delete
restore_current_blog();
[323] Fix | Delete
}
[324] Fix | Delete
[325] Fix | Delete
// Is it possible that none of the following conditions are met?
[326] Fix | Delete
$root_path_base = '';
[327] Fix | Delete
[328] Fix | Delete
// Get the Document root path. There must be a better way to do this.
[329] Fix | Delete
// For example, /srv/www/site/public_html for /srv/www/site/public_html/wp-content/uploads.
[330] Fix | Delete
if ( 0 === strpos( $upload['basedir'], ABSPATH ) ) {
[331] Fix | Delete
// Environments like Flywheel have an ABSPATH that's not used in the paths.
[332] Fix | Delete
$root_path_base = ABSPATH;
[333] Fix | Delete
} elseif ( ! empty( $_SERVER['DOCUMENT_ROOT'] ) && 0 === strpos( $upload['basedir'], wp_unslash( $_SERVER['DOCUMENT_ROOT'] ) ) ) {
[334] Fix | Delete
/**
[335] Fix | Delete
* This gets called when scanning for uncompressed images.
[336] Fix | Delete
* When ran from certain contexts, $_SERVER['DOCUMENT_ROOT'] might not be set.
[337] Fix | Delete
*
[338] Fix | Delete
* We are removing this part from the path later on.
[339] Fix | Delete
*/
[340] Fix | Delete
$root_path_base = realpath( wp_unslash( $_SERVER['DOCUMENT_ROOT'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
[341] Fix | Delete
} elseif ( 0 === strpos( $upload['basedir'], dirname( WP_CONTENT_DIR ) ) ) {
[342] Fix | Delete
// We're assuming WP_CONTENT_DIR is only one level deep into the document root.
[343] Fix | Delete
// This might not be true in customized sites. A bit edgy.
[344] Fix | Delete
$root_path_base = dirname( WP_CONTENT_DIR );
[345] Fix | Delete
}
[346] Fix | Delete
[347] Fix | Delete
/**
[348] Fix | Delete
* Filters the Document root path used to get relative paths for webp rules.
[349] Fix | Delete
* Hopefully of help for debugging and SLS.
[350] Fix | Delete
*
[351] Fix | Delete
* @since 3.9.0
[352] Fix | Delete
*/
[353] Fix | Delete
$root_path_base = apply_filters( 'smush_webp_rules_root_path_base', $root_path_base );
[354] Fix | Delete
[355] Fix | Delete
// Get the upload path relative to the Document root.
[356] Fix | Delete
// For example, wp-content/uploads for /srv/www/site/public_html/wp-content/uploads.
[357] Fix | Delete
$upload_root_rel_path = ltrim( str_replace( $root_path_base, '', $upload['basedir'] ), '/' );
[358] Fix | Delete
[359] Fix | Delete
// Get the relative path for the directory containing the webp files.
[360] Fix | Delete
// This directory is a sibling of the 'uploads' directory.
[361] Fix | Delete
// For example, wp-content/smush-webp for wp-content/uploads.
[362] Fix | Delete
$webp_root_rel_path = dirname( $upload_root_rel_path ) . '/smush-webp';
[363] Fix | Delete
[364] Fix | Delete
/**
[365] Fix | Delete
* Add a hook for user custom webp address.
[366] Fix | Delete
*
[367] Fix | Delete
* @since 3.9.8
[368] Fix | Delete
*/
[369] Fix | Delete
return apply_filters(
[370] Fix | Delete
'wp_smush_webp_dir',
[371] Fix | Delete
array(
[372] Fix | Delete
'upload_path' => $upload['basedir'],
[373] Fix | Delete
'upload_rel_path' => $upload_root_rel_path,
[374] Fix | Delete
'upload_url' => $upload['baseurl'],
[375] Fix | Delete
'webp_path' => dirname( $upload['basedir'] ) . '/smush-webp',
[376] Fix | Delete
'webp_rel_path' => $webp_root_rel_path,
[377] Fix | Delete
'webp_url' => dirname( $upload['baseurl'] ) . '/smush-webp',
[378] Fix | Delete
)
[379] Fix | Delete
);
[380] Fix | Delete
}
[381] Fix | Delete
[382] Fix | Delete
/**
[383] Fix | Delete
* Create test files and required directory.
[384] Fix | Delete
*
[385] Fix | Delete
* @return true|string String with the path that couldn't be written on failure.
[386] Fix | Delete
*/
[387] Fix | Delete
public function create_test_files() {
[388] Fix | Delete
$udir = $this->get_upload_dir();
[389] Fix | Delete
$test_png_file = $udir['upload_path'] . '/smush-webp-test.png';
[390] Fix | Delete
$test_webp_file = $udir['webp_path'] . '/smush-webp-test.png.webp';
[391] Fix | Delete
[392] Fix | Delete
// Create the png file to be requested if it doesn't exist. Bail out if it fails.
[393] Fix | Delete
if (
[394] Fix | Delete
! file_exists( $test_png_file ) &&
[395] Fix | Delete
! copy( WP_SMUSH_DIR . 'app/assets/images/smush-webp-test.png', $test_png_file )
[396] Fix | Delete
) {
[397] Fix | Delete
Helper::logger()->webp()->error( 'Cannot create test PNG file [%s].', $test_png_file );
[398] Fix | Delete
return $udir['upload_path'];
[399] Fix | Delete
}
[400] Fix | Delete
[401] Fix | Delete
// Create the WebP file that should be sent in the response if the rules work.
[402] Fix | Delete
if ( ! file_exists( $test_webp_file ) ) {
[403] Fix | Delete
$directory_created = is_dir( $udir['webp_path'] ) || wp_mkdir_p( $udir['webp_path'] );
[404] Fix | Delete
[405] Fix | Delete
// Bail out if it fails.
[406] Fix | Delete
if (
[407] Fix | Delete
! $directory_created ||
[408] Fix | Delete
! copy( WP_SMUSH_DIR . 'app/assets/images/smush-webp-test.png.webp', $test_webp_file )
[409] Fix | Delete
) {
[410] Fix | Delete
Helper::logger()->webp()->error( 'Cannot create test Webp file [%s].', $test_webp_file );
[411] Fix | Delete
return $udir['webp_path'];
[412] Fix | Delete
}
[413] Fix | Delete
}
[414] Fix | Delete
[415] Fix | Delete
return true;
[416] Fix | Delete
}
[417] Fix | Delete
[418] Fix | Delete
/**
[419] Fix | Delete
* Retrieves related webp image file path for a given non webp image file path.
[420] Fix | Delete
* Also create required directories for webp image if not exists.
[421] Fix | Delete
*
[422] Fix | Delete
* @param string $file_path Non webp image file path.
[423] Fix | Delete
* @param bool $make Weather to create required directories.
[424] Fix | Delete
*
[425] Fix | Delete
* @return string
[426] Fix | Delete
*/
[427] Fix | Delete
public function get_webp_file_path( $file_path, $make = false ) {
[428] Fix | Delete
$udir = $this->get_upload_dir();
[429] Fix | Delete
[430] Fix | Delete
$file_rel_path = substr( $file_path, strlen( $udir['upload_path'] ) );
[431] Fix | Delete
$webp_file_path = $udir['webp_path'] . $file_rel_path . '.webp';
[432] Fix | Delete
[433] Fix | Delete
if ( $make ) {
[434] Fix | Delete
$webp_file_dir = dirname( $webp_file_path );
[435] Fix | Delete
if ( ! is_dir( $webp_file_dir ) ) {
[436] Fix | Delete
wp_mkdir_p( $webp_file_dir );
[437] Fix | Delete
}
[438] Fix | Delete
}
[439] Fix | Delete
[440] Fix | Delete
return $webp_file_path;
[441] Fix | Delete
}
[442] Fix | Delete
[443] Fix | Delete
/**
[444] Fix | Delete
* Check whether the given attachment id or mime type can be converted to WebP.
[445] Fix | Delete
*
[446] Fix | Delete
* @param string $id Atachment ID.
[447] Fix | Delete
* @param string $mime Mime type.
[448] Fix | Delete
*
[449] Fix | Delete
* @return bool
[450] Fix | Delete
*/
[451] Fix | Delete
private function can_be_converted( $id = '', $mime = '' ) {
[452] Fix | Delete
if ( empty( $id ) && empty( $mime ) ) {
[453] Fix | Delete
return false;
[454] Fix | Delete
}
[455] Fix | Delete
[456] Fix | Delete
$mime = empty( $mime ) ? get_post_mime_type( $id ) : $mime;
[457] Fix | Delete
[458] Fix | Delete
// This image can not be converted to webp.
[459] Fix | Delete
if ( ! ( 'image/jpeg' === $mime || 'image/png' === $mime ) ) {
[460] Fix | Delete
return false;
[461] Fix | Delete
}
[462] Fix | Delete
[463] Fix | Delete
return true;
[464] Fix | Delete
}
[465] Fix | Delete
[466] Fix | Delete
/**
[467] Fix | Delete
* Checks whether an attachment should be converted to WebP.
[468] Fix | Delete
* Returns false if WebP isn't configured, the attachment was already converted,
[469] Fix | Delete
* or if the attachment can't be converted ( @see self::can_be_converted() ).
[470] Fix | Delete
*
[471] Fix | Delete
* @since 3.8.0
[472] Fix | Delete
*
[473] Fix | Delete
* @param string $id Attachment ID.
[474] Fix | Delete
*
[475] Fix | Delete
* @return bool
[476] Fix | Delete
*/
[477] Fix | Delete
public function should_be_converted( $id ) {
[478] Fix | Delete
// Avoid conversion when webp disabled, or when Smush is Free.
[479] Fix | Delete
if ( ! $this->is_active() || ! Helper::is_smushable( $id ) ) {
[480] Fix | Delete
return false;
[481] Fix | Delete
}
[482] Fix | Delete
[483] Fix | Delete
$meta = get_post_meta( $id, Smush::$smushed_meta_key, true );
[484] Fix | Delete
$webp_udir = $this->get_upload_dir();
[485] Fix | Delete
[486] Fix | Delete
// The image was already converted to WebP.
[487] Fix | Delete
if ( ! empty( $meta['webp_flag'] ) && file_exists( $webp_udir['webp_path'] . '/' . $meta['webp_flag'] ) ) {
[488] Fix | Delete
Helper::logger()->webp()->info( sprintf( 'The image [%d] is already converted to Webp: [%s]', $id, $meta['webp_flag'] ) );
[489] Fix | Delete
return false;
[490] Fix | Delete
}
[491] Fix | Delete
[492] Fix | Delete
return $this->can_be_converted( $id );
[493] Fix | Delete
}
[494] Fix | Delete
[495] Fix | Delete
/**
[496] Fix | Delete
* Check whether to resmush image or not.
[497] Fix | Delete
*
[498] Fix | Delete
* @since 3.9.6
[499] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function