\?.*)?$@i', $srcs[0], $src ) ) {
// Not a supported image format.
$data['srcset'][] = [
'url' => $srcs[0],
'descriptor' => $srcs[1],
];
continue;
}
$webp_url = imagify_path_to_webp( $src['src'] );
$webp_path = $this->url_to_path( $webp_url );
$webp_url .= ! empty( $src['query'] ) ? $src['query'] : '';
$data['srcset'][] = [
'url' => $srcs[0],
'descriptor' => $srcs[1],
'webp_url' => $webp_url,
'webp_path' => $webp_path,
'webp_exists' => $webp_path && $this->filesystem->exists( $webp_path ),
];
}
}
/**
* Filter a processed image tag.
*
* @since 1.9
* @author Grégory Viguier
*
* @param array $data An array of data for this image.
* @param string $image An image html tag.
*/
$data = apply_filters( 'imagify_webp_picture_process_image', $data, $image );
if ( ! $data || ! is_array( $data ) ) {
return false;
}
if ( ! isset( $data['tag'], $data['attributes'], $data['src_attribute'], $data['src'], $data['srcset_attribute'], $data['srcset'] ) ) {
return false;
}
return $data;
}
/**
* Tell if a content is HTML.
*
* @since 1.9
* @access protected
* @author Grégory Viguier
*
* @param string $content The content.
* @return bool
*/
protected function is_html( $content ) {
return preg_match( '/<\/html>/i', $content );
}
/**
* Convert a file URL to an absolute path.
*
* @since 1.9
* @access protected
* @author Grégory Viguier
*
* @param string $url A file URL.
* @return string|bool The file path. False on failure.
*/
protected function url_to_path( $url ) {
static $uploads_url;
static $uploads_dir;
static $root_url;
static $root_dir;
static $cdn_url;
static $domain_url;
/**
* $url, $uploads_url, $root_url, and $cdn_url are passed through `set_url_scheme()` only to make sure `stripos()` doesn't fail over a stupid http/https difference.
*/
if ( ! isset( $uploads_url ) ) {
$uploads_url = set_url_scheme( $this->filesystem->get_upload_baseurl() );
$uploads_dir = $this->filesystem->get_upload_basedir( true );
$root_url = set_url_scheme( $this->filesystem->get_site_root_url() );
$root_dir = $this->filesystem->get_site_root();
$cdn_url = $this->get_cdn_source();
$cdn_url = $cdn_url['url'] ? set_url_scheme( $cdn_url['url'] ) : false;
$domain_url = wp_parse_url( $root_url );
if ( ! empty( $domain_url['scheme'] ) && ! empty( $domain_url['host'] ) ) {
$domain_url = $domain_url['scheme'] . '://' . $domain_url['host'] . '/';
} else {
$domain_url = false;
}
}
// Get the right URL format.
if ( $domain_url && strpos( $url, '/' ) === 0 ) {
// URL like `/path/to/image.jpg.webp`.
$url = $domain_url . ltrim( $url, '/' );
}
$url = set_url_scheme( $url );
if ( $domain_url && stripos( $url, $cdn_url ) === 0 ) {
// CDN.
$url = str_ireplace( $cdn_url, $domain_url, $url );
}
// Return the path.
if ( stripos( $url, $uploads_url ) === 0 ) {
return str_ireplace( $uploads_url, $uploads_dir, $url );
}
if ( stripos( $url, $root_url ) === 0 ) {
return str_ireplace( $root_url, $root_dir, $url );
}
return false;
}
/**
* Get the CDN "source".
*
* @since 1.9.3
* @access public
* @author Grégory Viguier
*
* @param string $option_url An URL to use instead of the one stored in the option. It is used only if no constant/filter.
* @return array {
* @type string $source Where does it come from? Possible values are 'constant', 'filter', or 'option'.
* @type string $name Who? Can be a constant name, a plugin name, or an empty string.
* @type string $url The CDN URL, with a trailing slash. An empty string if no URL is set.
* }
*/
public function get_cdn_source( $option_url = '' ) {
if ( defined( 'IMAGIFY_CDN_URL' ) && IMAGIFY_CDN_URL && is_string( IMAGIFY_CDN_URL ) ) {
// Use a constant.
$source = [
'source' => 'constant',
'name' => 'IMAGIFY_CDN_URL',
'url' => IMAGIFY_CDN_URL,
];
} else {
// Maybe use a filter.
$filter_source = [
'name' => null,
'url' => null,
];
/**
* Provide a custom CDN source.
*
* @since 1.9.3
* @author Grégory Viguier
*
* @param array $filter_source {
* @type $name string The name of which provides the URL (plugin name, etc).
* @type $url string The CDN URL.
* }
*/
$filter_source = apply_filters( 'imagify_cdn_source', $filter_source );
if ( ! empty( $filter_source['url'] ) ) {
$source = [
'source' => 'filter',
'name' => ! empty( $filter_source['name'] ) ? $filter_source['name'] : '',
'url' => $filter_source['url'],
];
}
}
if ( empty( $source['url'] ) ) {
// No constant, no filter: use the option.
$source = [
'source' => 'option',
'name' => '',
'url' => $option_url && is_string( $option_url ) ? $option_url : get_imagify_option( 'cdn_url' ),
];
}
if ( empty( $source['url'] ) ) {
// Nothing set.
return [
'source' => 'option',
'name' => '',
'url' => '',
];
}
$source['url'] = $this->sanitize_cdn_url( $source['url'] );
if ( empty( $source['url'] ) ) {
// Not an URL.
return [
'source' => 'option',
'name' => '',
'url' => '',
];
}
return $source;
}
/**
* Sanitize the CDN URL value.
*
* @since 1.9.3
* @access public
* @author Grégory Viguier
*
* @param string $url The URL to sanitize.
* @return string
*/
public function sanitize_cdn_url( $url ) {
$url = sanitize_text_field( $url );
if ( ! $url || ! preg_match( '@^https?://.+\.[^.]+@i', $url ) ) {
// Not an URL.
return '';
}
return trailingslashit( $url );
}
}
Error thrown
Class 'Imagify\Webp\Picture\Display' not found