Subir a WordPress ficheros con otras extensiones

¡Hola! En esta pequeña entrada explicaremos cómo subir a WordPress ficheros con otras extensiones.

Algunas veces en nuestros websites necesitamos subir ficheros que por defecto no están permitidos en WordPress, por ejemplo imágenes WEBP, ficheros de libro EPUB y otros que podemos necesitar para nuestra web o la de un cliente. En este post veremos:

  • Como habilitar ese fichero desde código
  • Código para no depender de ningún plugin de terceros

Contenido

Cómo habilitar un tipo de fichero desde plugin

En caso de que no queramos añadir ningun tipo de código, ya existen plugins destinados a este tipo de tareas, podemos ver los siguientes ejemplos a continuación:

Ficheros WEBP

Los ficheros WEBP son un «nuevo» tipo de fichero de imágenes. Lo que hace diferente del resto de tipos de fichero de imagen a WEBP es su escasa perdida de calidad en comparación a su tamaño. Es decir, un fichero PNG convertido a WEBP no pierde calidad pero disminuye muchísimo su ocupación en disco. Respecto a JPG si se pierde un poco de calidad pero se reduce mucho la ocupación en disco.

Explicado esto, decir que se está poniendo de «moda» utilizar este tipo de fichero de imagen para reducir los tiempos de carga de los sitios web. Antes la excusa era que el navegador Safari de Apple no tenia soporte para este tipo de ficheros de imagen, pero como se puede ver en este artículo, ya lo han añadido.

Una sencilla forma de habilitar ficheros de tipo WEBP en la subida de ficheros a WordPress es con el plugin WebP Express el cual aparte de añadir este tipo de fichero a los ficheros permitidos y añadir su pre-visualización, convierte las imagenes PNG y JPG existentes a WEBP solo en el caso de que el navegador sea compatible con este tipo de ficheros.

Ficheros EPUB

Los ficheros de tipo EPUB son un tipo de fichero de libro electrónico. Si escribes libros y quieres ofrecerlos desde tu web en un formato de libro digital y no solo en PDF, ya sea mediante WooCommerce o de forma gratuita, deberás añadir soporte a ese tipo de fichero.

Para habilitarlo existen varios plugins, el que mas nos gusta de los que hemos probado es allow-epub-and-mobi-formats-upload el cual es algo antiguo pero funciona correctamente.

Otros tipos de fichero

Normalmente hay plugins para cada tipo de extensión pero si quieres habilitar varias extensiones o quieres habilitar una para la que no encuentras plugin, puedes hacerlo mediante el código que verás a continuación.

Habilitarlo mediante código

Este código ha de añadirse en el fichero functions.php del tema activo:

//Vamos a soportar WEBP, EPUB,MOBI MIMETYPE
function upload_new_mimetypes( $existing_mimes ) {
	// add webp to the list of mime types
	$existing_mimes['webp'] = 'image/webp';
        $existing_mimes['epub'] = 'application/epub+zip';
        $existing_mimes['mobi'] = 'application/x-mobipocket-ebook';

	// return the array back to the function with our added mime type
	return $existing_mimes;
}
add_filter( 'mime_types', 'upload_new_mimetypes' );

Como se puede ver hay 3 lineas en las cuales definimos una entrada del array $existing_mimes. Cada linea es un tipo distinto, debe de estar acompañado de su mimetype, estos mimetypes puedes verlo normalmente en este enlace.

Si es un mimetype de imagen y quieres poder visualizar el thumbnail en el listado de medios (por ejemplo con WEBP), deberás añadir el siguiente código  a partir del anterior:

//HABILITAMOS THUMNAIL / PREVIEW
function webp_is_displayable($result, $path) {
    if ($result === false) {
        $displayable_image_types = array( IMAGETYPE_WEBP, IMAGETYPE_ICO );
        $info = @getimagesize( $path );

        if (empty($info)) {
            $result = false;
        } elseif (!in_array($info[2], $displayable_image_types)) {
            $result = false;
        } else {
            $result = true;
        }
    }

    return $result;
}
add_filter('file_is_displayable_image', 'webp_is_displayable', 10, 2);
//FIN DE WEBP

Con la constante IMAGETYPE_WEBP de PHP definimos el tipo de ficheros que tendrán pre-visualización, el listado de estas constantes lo podemos ver aquí. En este código hemos permitido la previsualización de WEBP y de ICO. Si queremos definir otros solo tenemos que modificar la linea donde se define el array «displayable_image_types».

 

Deja una respuesta