Erzeugt deine Website nach einem PHP-Update von PHP 7.x auf PHP 8.x einen kritischen, schwerwiegenden oder fatalen (je nach Übersetzung und Ausgabe) PHP-Fehler wie diesen hier?
PHP Schwerwiegender Fehler: Nicht abgefangen TypeError: Nicht unterstützte Operandentypen: string * float in […] /wordpress/wp-includes/media.php:477
Der Support von Elementor schreibt dazu Folgendes:
Technisch ist das Problem auch in wenigen Sätzen kurz erklärt: In dem Array, in dem unter anderem die Bildgrößen gespeichert werden, sind diese als Zeichenfolgen abgelegt. WordPress versucht hier, einen Vergleich der Bildgrößen durchzuführen. Und genau das führt zum Problem, denn WordPress arbeiten mit Zahlen und versucht diese mit einer Zeichenfolge zu vergleichen – das löst einen TypeError aus.
Was ist das Problem?
Auch dazu gibt der Support von Elementor Auskunft:
Die Hauptursache des Problems liegt in PHP 8+ mit der benutzerdefinierten Bildgrößenfunktion von Elementor, die unserem Entwicklerteam bereits bekannt ist. Einer der Beiträge, die für die Kategorie geladen werden, in der das Problem auftritt, verwendet eine benutzerdefinierte Bildgröße.
Im Klartext: Nutzt du auf deiner Website Bilder mit einer benutzerdefinierten Bildgröße, erzeugt die Berechnung genau diesen einen Fehler.
Was ist die Lösung?
Stand heute musst du entweder ein Downgrade deiner PHP-Version durchführen (< PHP 8.0) oder dich selbst um eine Lösung kümmern. Da weder ein Downgrade in Frage kam, noch eine langwierige Suche nach dem schuldigen Bild, musste eine andere Lösung her.
Zum Glück gibt es eine optimale Übergangslösung, in Form eines Code-Schnipsels, zum Einfügen in die funtctions.php (besser jedoch, du benutzt beispielsweise das Plugin Code Snippets):
add_filter( 'wp_calculate_image_srcset_meta', function ( $image_meta ) {
if ( ! empty( $image_meta['sizes'] ) ) {
foreach ( $image_meta['sizes'] as $size_key => $size ) {
if ( ! is_array( $size ) ) {
continue;
}
if ( absint( $size['width'] ) !== $size['width'] ) {
$image_meta['sizes'][ $size_key ]['width'] = (int) $size['width'];
}
if ( absint( $size['height'] ) !== $size['height'] ) {
$image_meta['sizes'][ $size_key ]['height'] = (int) $size['height'];
}
}
}
return $image_meta;
} );
Der Code-Schnipsel modifiziert die generierten Bild-Metadaten so, dass ein fehlerfreies Vergleichen der Bild-Metadaten möglich ist.