Permițând încărcarea fișierelor WebP?
Am încercat ambele variante, dar tot primesc mesajul de eroare: "Ne pare rău, acest tip de fișier nu este permis din motive de securitate."
// adaugă suport pentru tipurile mime WebP
function webp_upload_mimes( $existing_mimes ) {
// adaugă WebP în lista de tipuri mime
$existing_mimes['webp'] = 'image/webp';
// returnează array-ul înapoi funcției cu tipul nostru mime adăugat
return $existing_mimes;
}
add_filter( 'mime_types', 'webp_upload_mimes' );
function my_custom_upload_mimes($mimes = array()) {
// adaugă WebP în lista de tipuri mime
$existing_mimes['webp'] = 'image/webp';
return $mimes;
}
add_action('upload_mimes', 'my_custom_upload_mimes');
Alte sugestii?

Este necesar să folosiți filtrul wp_check_filetype_and_ext
pentru a seta tipul mime și extensia pentru fișierele webp, în plus față de utilizarea filtrului upload_mimes
pentru a adăuga tipul mime la lista de tipuri mime ce pot fi încărcate.
/**
* Setează extensia și tipul mime pentru fișierele .webp.
*
* @param array $wp_check_filetype_and_ext Array de date despre fișier ce conține cheile 'ext', 'type' și
* 'proper_filename'.
* @param string $file Calea completă către fișier.
* @param string $filename Numele fișierului (poate diferi de $file datorită faptului că
* $file se află într-un director temporar).
* @param array $mimes Cheia este extensia fișierului cu valoarea ca tip mime.
*/
add_filter( 'wp_check_filetype_and_ext', 'wpse_file_and_ext_webp', 10, 4 );
function wpse_file_and_ext_webp( $types, $file, $filename, $mimes ) {
if ( false !== strpos( $filename, '.webp' ) ) {
$types['ext'] = 'webp';
$types['type'] = 'image/webp';
}
return $types;
}
/**
* Adaugă tipul de fișier webp la tipurile mime permise
*
* @see https://codex.wordpress.org/Plugin_API/Filter_Reference/upload_mimes
*
* @param array $mimes Tipuri mime indexate după regex-ul extensiei fișierului corespunzătoare
* acestor tipuri. 'swf' și 'exe' sunt eliminate din lista completă. 'htm|html' de asemenea
* eliminate în funcție de capacitățile '$user'.
*
* @return array
*/
add_filter( 'upload_mimes', 'wpse_mime_types_webp' );
function wpse_mime_types_webp( $mimes ) {
$mimes['webp'] = 'image/webp';
return $mimes;
}
Am testat acest cod pe WordPress v5.0.1 și am reușit să încărc fișiere webp după adăugarea acestui cod.

Ce ciudat. Funcția upload_mimes pe care o aveam deja funcționa perfect, și apoi într-o zi, fără niciun motiv evident, a încetat să mai funcționeze. Am descoperit asta și am adăugat codul tău (pentru mine, problema era .svg
), și voilà - perfect! Oricum, mulțumesc pentru asta.

Nu funcționează pentru mine, din păcate. Încă primesc mesajul "Această imagine nu poate fi procesată de serverul web. Convertiți-o în JPEG sau PNG înainte de încărcare." Folosesc WP 5.8.

@WilliamBeaumont Cred că problema pe care ai menționat-o este diferită de cea a OP. Acest comentariu (și firul de discuție) ar putea ajuta la rezolvarea erorii pe care ai notat-o: https://wordpress.org/support/topic/wordpress-5-8-still-rejects-webp-images/#post-14733877

Uneori încărcările sunt limitate de furnizorul de hosting. Încearcă să definești constanta ALLOW_UNFILTERED_UPLOADS
care permite încărcarea oricărui tip de fișier:
define( 'ALLOW_UNFILTERED_UPLOADS', true );
Folosește această constantă în fișierul wp-config.php
pentru un moment, în scop de testare. Apoi încearcă să încarci din nou fișierul, iar dacă în continuare nu funcționează, este probabil ca hosting-ul să fi blocat acel tip de fișier pentru încărcare. Asigură-te că elimini constanta cât mai repede posibil, după ce ai terminat testarea.
În plus, poți folosi funcția get_allowed_mime_types()
pentru a verifica tipurile de fișiere permise la încărcare.

Am reușit să fac să funcționeze prin crearea următorului plugin. (Trebuie doar să adaugi acest cod într-un fișier nou în directorul /wp-content/plugins/
pentru a crea pluginul. Asigură-te că activezi pluginul după ce l-ai creat.)
<?php
/**
* Plugin Name: WPSE Allow Webp Uploads
*/
function webp_file_and_ext( $mime, $file, $filename, $mimes ) {
$wp_filetype = wp_check_filetype( $filename, $mimes );
if ( in_array( $wp_filetype['ext'], [ 'webp' ] ) ) {
$mime['ext'] = true;
$mime['type'] = true;
}
return $mime;
}
add_filter( 'wp_check_filetype_and_ext', 'webp_file_and_ext', 10, 4 );
function add_webp_mime_type( $mimes ) {
$mimes['webp'] = 'image/webp';
return $mimes;
}
add_filter( 'upload_mimes', 'add_webp_mime_type' );

Am făcut un exemplu despre cum ar putea arăta acest lucru într-o clasă:
<?php
class Example {
public array $mime_types = [
'woff' => 'font/woff|application/font-woff|application/x-font-woff|application/x-woff|application/octet-stream',
'woff2' => 'font/woff2|application/font-woff2|application/x-font-woff2|application/x-woff2|application/octet-stream',
'ttf' => 'font/ttf|application/font-ttf|application/x-font-ttf|application/x-ttf|application/octet-stream',
'otf' => 'font/otf|application/font-otf|application/x-font-otf|application/x-otf|application/octet-stream',
'eot' => 'application/vnd.ms-fontobject'
];
private function __construct() {
/** alte acțiuni și filtre */
add_filter( 'upload_mimes', [ $this, 'custom_upload_mimes' ] );
add_filter( 'wp_check_filetype_and_ext', [ $this, 'file_and_ext_webp' ], 10, 4 );
}
/**
* @param $existing_mimes array
*
* @return array
*/
function custom_upload_mimes( $existing_mimes = [] ): array {
foreach ( $this->mime_types as $ext => $value ) {
$existing_mimes[ $ext ] = $value;
}
return $existing_mimes;
}
/**
* Setează extensia și tipul mime pentru fișierele predefinite.
*
* @return mixed
*/
function file_and_ext_webp( $types, $file, $filename, $mimes ) {
foreach ( $this->mime_types as $ext => $value ) {
if ( false !== strpos( $filename, ".$ext" ) ) {
$types['ext'] = $ext;
$types['type'] = $value;
}
}
return $types;
}
}
https://gist.github.com/frizzant/7ad08ad6bfc0dbac08dabeed73e2d964
