El asombroso caso del código que ralentizaba mi web más de 5 segundos – No imaginas lo que pasó después…

¿Te acuerdas que ayer te contaba que descubrí lo de WooCommerce Analytics buscando solución a otro problema? Pues hoy te contaré de qué iba la cosa.

El misterioso caso de 4 webs iguales pero una era más lenta que el resto

Resulta que tengo varias webs asociadas al blog que son donde ofrezco los distintos servicios WordPress. Pues todas tienen el mismo tema (Divi, sí, lo uso mucho y me encanta), prácticamente el mismo diseño unificado y casi los mismos plugins, pero una de ellas destacaba por ser excesivamente lenta, la web de servicios de consultoría y desarrollo web.

He de decirte que en alguna de las otras, como en la de mantenimientos WordPress, hay incluso más plugins y más consumidores de recursos, pero todas estas webs suelen cargar en torno a 1 segundo, a veces incluso menos, pero no la de servicios, que tardaba más de 6 segundos en cargar, algo que sin ser terrible no es mi ideal, todo sea dicho.

Huelga decir que en todas aplico las mismas estrategias de optimización, así que por ahí no había diferencias.

Pero lo más sorprendente es que la cosa no era de siempre, había sido algo repentino, a partir de una fecha concreta.

Es más, si te fijas en la captura los tiempos de carga se habían disparado pero la web pesaba lo mismo y generaba la misma cantidad de peticiones, raro raro.

Anteriormente a esa fecha los tiempos de carga eran muy similares al resto de webs, incluso a la de cursos WordPress, que además de WooCommerce tiene todo un LMS, Sensei, y varios plugins más para ofrecer una academia online a mis alumnos.

Llamando al C.S.I.

Pues bien, revisando las webs en detalle caí en la cuenta de que la única diferencia entre ambas era que en la web de servicios tengo activo JetPack para usar su módulo de formularios, pues me facilitaba mucho las cosas.

Luego, un repaso al informe de rendimiento en GTMetrix, me confirmó que todo el problema venía de un JavaScript que cargaba JetPack, y el solito generaba hasta 2 instancias, cada una de más de 1 segundo de tiempo de carga.

Sin saber aún de la existencia de WooCommerce Analytics, investigué un poco y encontré en el GitHub de JetPack un informe de este problema, en el que se daba una solución para evitarlo.

Y es que parece ser que el dichoso JavaScript, de nombre

s-202026.js

, perteneciente a las estadísticas de JetPack, incluso había provocado errores 500 en algunas webs.

¡Espera! ¿He dicho «perteneciente a las estadísticas de JetPack»? En este momento no me di cuenta de ello, pero luego si caí, más abajo te cuento.

Bueno, llegado a este punto probé el siguiente código, añadido a mi plugin de personalizaciones (también funciona en el archivo functions.php del tema activo):

/**
 * Fix the path of Woo script.
 *
 * @param string $url The URL to the file.
 * @param string $min_path The minified path.
 * @param string $non_min_path The non-minified path.
 */
function jetpackcom_fix_woo_script_path( $url, $min_path, $non_min_path ) {
	if ( wp_startswith( $min_path, 'https://stats.wp.com/s-' ) ) {
		return $min_path;
	}
	return $url;
}
add_filter( 'jetpack_get_file_for_environment', 'jetpackcom_fix_woo_script_path', 10, 3 );

Y el cambio de rendimiento fue bastante bueno, no constante, pero sí se notaba que bajaban los tiempos, aunque a veces el mismo JavaScript daba errores en alguna de sus instancias de carga, pero sobre todo, seguía cargándose.

Así que, aunque algo había mejorado el rendimiento, estaba aún lejos de mis estándares, sobre todo del más importante: comprender por qué pasan las cosas que pasan.

JetPack y la madre que lo parió

Así que, a lo tonto, se me encendió la lucecita y, repasando la página de GitHub caí en que esto venía de un módulo llamado WooCommerce Analytics, que ni sabía que existía porque en ninguna actualización se había pedido consentimiento alguno para esta recogida de datos, y esto te lo puedo asegurar porque JetPack lo traduzco a cada versión.

Lo más gordo del asunto es que a ti, como propietario de una tienda online no te aporta nada, ese módulo solo sirve para enviar información de tu Ecommerce, de tus productos, comportamiento de los usuarios y procesos de compra, a Automattic.

Dicho y hecho, miré en la instalación de JetPack, y al no encontrar el módulo en los ajustes «normales» (visibles más bien) busqué en la lista completa de módulos ocultos de JetPack, y ahí estaba el bicho.

Pero, me extrañaba haber leído que era algo que tenía que ver con las estadísticas de JetPack, que nunca activo, pero bueno, me puse a ello y desactivé el maldito módulo.

Dicho y hecho, probé la carga de la página, y a simple vista ya se notaba la diferencia, así que volví a analizarla y el cambio era sorprendente…

Haciendo una comparación con los resultados de justo antes de desactivar el módulo de WooCommerce Analytics se hacía más patente aún.

Y, por supuesto, ni rastro ya del JavaScript

s-202026.js

de las estadísticas de JetPack.

Repasando los cambios realizados, había pasado la web de cargar en más de 6 segundos a menos de 1 segundo.

¿Qué aprendo yo de esto?

No se tú, pero yo he aprendido algunas cosas de esta experiencia:

  1. Tengo que repasar todas las webs en las que tenga JetPack para desactivar cagando leches el módulo de WooCommerce Analytics. A mi no me aporta nada, solo sirve para enviar datos a Automattic.
  2. Nunca actualizar ningún plugin sin comprobar si la actualización ha afectado de algún modo a los tiempos de carga de la web. Es algo que hacía de vez en cuando pero ahora lo hago siempre, nada más actualizar.
  3. No volver a fiarme de JetPack, y por extensión de Automattic, y su no cumplido compromiso con la privacidad.
  4. Se confirma una vez más que el compromiso de las empresas no europeas con la privacidad de los usuarios es mero postureo, a la que te descuidas te meten en un lío legal con los visitantes y clientes de tu web, recopilando datos sin informarte, y en consecuencia sin que tú puedas informar a los usuarios de TU web.

Nota: Si quieres saber las implicaciones de privacidad del módulo WooCommerce Analytics de JetPack te recomiendo leer este otro artículo que publiqué.

La entrada El asombroso caso del código que ralentizaba mi web más de 5 segundos – No imaginas lo que pasó después… la publicó primero Fernando Tellado en Ayuda WordPress. No copies contenido, no dice nada bueno de ti a tus lectores.

JetPack espía las ventas y productos de tu tienda online WooCommerce

Pues sí, resulta que buscando solución a otro problema, descubrí que el plugin JetPack ha incluido recientemente un módulo, activo por defecto y sin avisar, que rastrea tu instalación de WooCommerce.

¿Qué espía JetPack de mi tienda online?

En concreto, según la propia documentación de JetPack, rastrea sin tu consentimiento lo siguiente:

Sigue estos eventos e interacciones del comportamiento de tus visitantes:

  • Cuando ven productos.
  • Cuando se añade o quita un producto del carrito.
  • Cuando se visualiza la página de finalizar compra.
  • Cuando se procesa un pedido.

Toda esta información se almacena en los servidores de Automattic, junto a las estadísticas de JetPack, si tuvieses activo el módulo, y sino también.

¿Qué te parece?

¿Cómo lo hace?

Simple, tanto si instalas JetPack por primera vez como si has actualizado recientemente, añade un módulo llamado WooCommerce Analytics, activo por defecto sin tu consentimiento ni información.

¡No lo veo! ¿Dónde está ese módulo de JetPack? ¿Cómo lo desactivo?

Pues no está a la vista en los ajustes de JetPack, sino que está oculto, escondido, como lo quieras llamar, en la lista completa real de módulos de JetPack.

En este vídeo te muestro cómo encontrarlo y desactivarlo…

¿Por qué no piden permiso ni informan de ese seguimiento?

Sinceramente no alcanzo a entender el motivo de que ni pidan consentimiento y ni siquiera informen de tal seguimiento de actividad en las tiendas online creadas con WooCommerce.

He revisado los textos de privacidad de WordPress por si JetPack o WooCommerce indicasen algo al respecto y no, no indican nada.

Tampoco lo hace Automattic en la política de privacidad a la que enlaza el plugin JetPack en su página de ajustes y tampoco, no dicen nada al respecto. Ni siquiera en su aludida política de compromiso con la GDPR.

Huelga decir que esto incumple flagrantemente con el RGPD, la legislación española trasladada desde la GDPR europea, pues no se pide en ningún momento consentimiento, ni al propietario del sitio, ni mucho menos a los usuarios, pero es que además deja inerme al propietario del Ecommerce, al no ser siquiera consciente de que se está haciendo este seguimiento, por lo que no puede informar.

¿Qué hago?

Pues creo que está claro, así que ya sabes, tienes 2 opciones:

  1. Desactivar el módulo como te muestro en el vídeo de arriba (bien).
  2. No desactivarlo pero informar a tus usuarios del seguimiento que se está haciendo por parte de Automattic de sus acciones en tu tienda online (mal).

Por mi parte, además, les pedí que expliquen esta situación en un debate en el foro del plugin, por si tienen algún motivo que se me escape, pero parece que no, simplemente lo hicieron, pasándose la privacidad por el arco del triunfo.

¿Me equivoco? ¿estoy siendo demasiado tiquismiquis? ¿tú qué opinas de esto?

Spoiler: Mañana sigue esta historia, con sorprendente resultado e implicaciones.

La entrada JetPack espía las ventas y productos de tu tienda online WooCommerce la publicó primero Fernando Tellado en Ayuda WordPress. No copies contenido, no dice nada bueno de ti a tus lectores.

Enlaces «nofollow» y «sponsored» fáciles … y más mejoras en Yoast SEO

En la última actualización, el plugin Yoast SEO ha introducido algunas mejoras en el editor de bloques de WordPress que ya puedes probar.

Enlaces «nofollow» y «sponsored»

Para mi gusto la mejora más interesante es que en la caja de inserción de enlaces ahora aparecen dos casillas con las que poder añadir fácilmente relaciones de enlace «nofollow» y «sponsored».

Ya hemos hablado de la relación «nofollow», y también de cómo introdujo Google la relación «sponsored», así que no me enrollaré mucho, pero resumiendo, tienen su razón de existir por esto:

  • nofollow: indica a los buscadores que no tengan en cuenta el enlace ni compartan posicionamiento de la página con el mismo.
  • sponsored: indica a los buscadores que es un enlace pagado, que no deberían contar tampoco de cada al posicionamiento.

Pues bien, ahora es muy fácil añadir estas relaciones a tus enlaces, así…

Adicionalmente, fíjate cuándo lo uses que al marcar un enlace como «sponsored» se activa automáticamente la casilla «nofollow», que es la indicación que hizo Google al respecto.

Comprobaciones SEO antes de publicar

Además de la mejora anterior, también se ha introducido un paso adicional en las comprobaciones previas a la publicación de las entradas y páginas, que ahora mostrarán un resumen de los análisis de Yoast en cuanto a SEO y legibilidad.

Si hay elementos susceptibles de mejora te muestra un botón para volver a la sección de análisis de Yoast SEO en el editor para repasarlos.

Y estas son las novedades principales de la última versión, y aunque es verdad que no suelo comentar cada nueva actualización de este plugin ni de ningún otro, en esta ocasión me ha parecido relevante que estés informado de estas nuevas opciones, realmente interesantes.

Para terminar, debes saber que estas mejoras solo funcionan con el editor de bloques y WordPress actualizado a la última versión o con el plugin Gutenberg instalado y activo.

Así que si aún utilizas el editor clásico o no tienes WordPress actualizado no verás estos cambios.

La entrada Enlaces «nofollow» y «sponsored» fáciles … y más mejoras en Yoast SEO la publicó primero Fernando Tellado en Ayuda WordPress. No copies contenido, no dice nada bueno de ti a tus lectores.

Cómo quitar secciones del personalizador de WordPress

El personalizador de WordPress es una herramienta fundamental para el diseño de tu web, y los temas que instalas le añaden montones de ajustes y secciones para que te sea más sencillo, pero ¿no te ha pasado que hay secciones que te sobran, que las quitarías?

Pues resulta que es muy fácil ocultar o quitar secciones del personalizador de WordPress, solo tienes que usar una acción que llame al objeto

$wp_customize

para ocultar secciones y ajustes, igual que harías para añadirlos.

En el siguiente código tienes una función que ocultará todas las  secciones por defecto de WordPress del personalizador:

/* Ocultar secciones del personalizador de WordPress */
function ocultar_secciones_personalizador( $wp_customize ) {
    $wp_customize->remove_section( 'title_tagline' ); // Identidad del sitio
    $wp_customize->remove_section( 'static_front_page' ); // Ajustes de la pagina de inicio
    $wp_customize->remove_section( 'colors' ); // Colores
    $wp_customize->remove_panel( 'nav_menus'); // Menús
    $wp_customize->remove_panel( 'widgets' ); // Widgets
    $wp_customize->remove_section( 'header_image' ); // Imagen de cabecera
    $wp_customize->remove_section( 'background_image' ); // Imagen de fondo
    $wp_customize->remove_section( 'themes' ); // Temas
    $wp_customize->remove_control( 'custom_css' ); // CSS adicional 
}
add_action( 'customize_register', 'ocultar_secciones_personalizador', 30);

Si añades este código al final del archivo functions.php del tema activo o de tu plugin de personalizaciones, pasarías de esto…

A esto otro…

Como puedes comprobar, se han eliminado todas las secciones estándar de WordPress del personalizador, quedando solamente las que pertenecen al tema activo.

Una vez visto el resultado, si no quieres eliminar alguna sección del personalizador, solo tienes que editar el código anterior y «comentar» las líneas de las secciones que no quieras quitar del personalizador.

Por ejemplo…

/* Ocultar secciones del personalizador de WordPress */
function ocultar_secciones_personalizador( $wp_customize ) {
    $wp_customize->remove_section( 'title_tagline' ); // Identidad del sitio
    $wp_customize->remove_section( 'static_front_page' ); // Ajustes de la pagina de inicio
    $wp_customize->remove_section( 'colors' ); // Colores
    //$wp_customize->remove_panel( 'nav_menus'); // Menús
    //$wp_customize->remove_panel( 'widgets' ); // Widgets
    $wp_customize->remove_section( 'header_image' ); // Imagen de cabecera
    $wp_customize->remove_section( 'background_image' ); // Imagen de fondo
    $wp_customize->remove_section( 'themes' ); // Temas
    $wp_customize->remove_control( 'custom_css' ); // CSS adicional 
}
add_action( 'customize_register', 'ocultar_secciones_personalizador', 30);

Al comentar (añadimos

//

al principio de la línea) las líneas de las secciones de menús y widgets, algo muy utilizado habitualmente, quedaría así:

Ahora tendrías las secciones de ajustes del personalizador propias del tema activo, además de las secciones de widgets y menús de WordPress, para cuando quieras personalizar menús y widgets en cualquier momento.

En cualquier caso, espero que te haya gustado el truco, y que lo aproveches para tu propia web o webs de clientes en las que no quieras que toquen «lo que no deben».

Nota: Para ocultar secciones específicas de temas y/o plugins deberás consultar al desarrollador para que te indique el slug de cada sección que quieras eliminar

La entrada Cómo quitar secciones del personalizador de WordPress la publicó primero Fernando Tellado en Ayuda WordPress. No copies contenido, no dice nada bueno de ti a tus lectores.

Cómo añadir marcas de agua a tus imágenes fácil y gratis en WordPress

Hay muchos tipos de web para las que es imprescindible aplicar marcas de agua a sus imágenes, desde portafolios de artistas a webs de inmobiliarias.

Las marcas de agua son importantes por varios motivos:

  • Protección contra el robo.
  • Firma.
  • Difusión de marca.
  • Reconocimiento de autoría.

Así que vamos a aprender cómo añadir marcas de agua a imágenes en WordPress, y no me enrollaré en plugins premium, vamos a ver cómo se hace de manera sencilla y gratis.

Cómo añadir marcas de agua con un plugin

Vamos, sin anestesia, instala el plugin Easy Watermark, hay otros pero después de probarlos todos este es el que mejor funciona y tiene más prestaciones útiles y gratis.

Lo instalas como cualquier otro plugin, desde el instalador de plugins de tu WordPress.

Una vez instalado y activo pásate por su página de ajustes, en Herramientas > Easy Watermark porque hay algunas cosillas que configurar.

Primero asigna los permisos de usuario, por si quieres que los perfiles de autor o editor puedan:

  • Crear marcas de agua
  • Editar marcas de agua de otros
  • Aplicar marcas de agua

Ajustes de las marcas de agua

Mi consejo es que lo dejes como está, sin activar, salvo que algún usuario con ese perfil necesites que haga esto.

A continuación pásate por los ajustes generales. Ahí podrás…

  • Configurar la calidad del JPG generado al aplicar la marca de agua.
  • Filtrar el atributo srcset: Para que todos los tamaños se muestren con marca de agua  (recomendable).
  • Activar copias de seguridad: Para que se guarden copias de tus originales, por si decides restaurarlas sin las marcas de agua (absolutamente recomendable)

En la siguiente pestaña de herramientas es donde empezarás a ver el potencial del plugin, pues desde ahí puedes lanzar la herramienta de añadido masivo de marcas de agua y la de restauración.

Marcas de agua de imagen

Pero antes hay que crear las marcas de agua, y puedes crear un máximo de 2 marcas de agua:

  1. Una marca de agua de imagen
  2. Una marca de agua de texto

Y podrás aplicar una o ambas a tus imágenes, ya sea una a una o por lotes, masivamente.

Para eso ve a la primera pestaña de los ajustes, el de marcas de agua y añade la primera.

A continuación elige si será de imagen o de texto.

Si es de imagen los ajustes principales serán los siguientes…

Como ves en la imagen es muy fácil de configurar, hasta puedes elegir una imagen de vista previa para ver cómo se verá la marca de agua en tus imágenes, algo realmente útil, que no he visto en ningún otro plugin, ni gratis ni de pago.

Un poco más abajo puedes escalar el tamaño de la imagen de marca de agua, por si quieres hacerla más pequeña o más grande (no recomendado, se verá pixelada).

El siguiente paso es decidir a qué tamaños de imagen se añadirán marcas de agua.

Y, siguiendo por la página de edición de tu marca de agua, casi lo más importante: a qué imágenes se aplicará automáticamente al subirlas.

Te recomiendo que lo actives, pues te ahorrará mucho trabajo posterior cada vez que subas una imagen.

Luego, deberás decidir si lo aplicas a todos los tipos de archivo y en todos los tipos de contenido o solo en algunos.

Por ejemplo, no aplicar marca de agua a las entradas y sí a los productos y propiedades inmobiliarias, si tienes un Ecommerce o una web inmobiliaria.

Marcas de agua de texto

Si prefieres hacer una marca de agua de texto el proceso es muy similar al anterior.

Como verás en la captura anterior, en vez de ajustes de imagen, serán de texto. El resto de ajustes es igual salvo los marcadores de posición.

Puedes usarlos en vez de teclear un texto, para añadir automáticamente el nombre del autor de una publicación, y muchas cosas más.

Cuando termines ya tienes tus marcas de agua para poder aplicarlas.

Cómo añadir marcas de agua en lotes, masivamente

Si quieres empezar bien, será buena idea aplicar el proceso de añadir marcas de agua en lotes, en la pestaña de herramientas, pero también puedes hacerlo desde la pantalla de medios de la biblioteca multimedia de WordPress.

Solo tienes que poner los medios en la visualización del modo de listado, seleccionar a las que quieras añadir una marca de agua, y en el desplegable de «Acciones en lote» elegir la marca de agua (Watermark), y a continuación, al lado, qué marca de agua de las que has creado aplicar a las imágenes seleccionadas.

Cuando pulses el botón de aplicar el proceso se realiza automáticamente.

Cómo restaurar las imágenes originales, sin marcas de agua, en lotes

Del mismo modo, si lo necesitases, también puedes restaurar las imágenes originales, en la misma pantalla y casi igual, simplemente seleccionando la opción de restaurar.

El resultado de aplicar marcas de agua

Un ejemplo de cómo pueden verse las marcas de agua con el plugin lo tienes en la siguiente captura, de una demo de web de inmobiliaria.

Cómo añadir marcas de agua con un código

El bueno de Alex Mills, tristemente fallecido, nos dejó este código, que puedes instalar directamente como un plugin – sin ajustes – para añadir fácilmente marcas de agua automáticamente a todas las imágenes subidas.

watermark = apply_filters( 'wpcom_watermark_image', STYLESHEETPATH . '/images/upload-watermark.png' ); //ruta de tu imagen de marca de agua
		if ( ! file_exists( $this->watermark ) )
			return false;

		add_filter( 'wp_handle_upload_prefilter', array( &$this, 'handle_file' ), 100 );
		add_filter( 'wp_upload_bits_data',        array( &$this, 'handle_bits' ), 10, 2 ); // http://core.trac.wordpress.org/ticket/12493
	}

	// For filters that pass a $_FILES array
	public function handle_file( $file ) {

		// Make sure the upload is valid
		if ( 0 == $file['error'] && is_uploaded_file( $file['tmp_name'] ) ) {

			// Check file extension (can't use $file['type'] due to Flash uploader sending application/octet-stream)
			if ( ! $type = $this->get_type( $file['name'] ) ) {
				return $file;
			}

			// Load the image into $image
			switch ( $type ) {
				case 'jpeg':
					if ( ! $image = @imagecreatefromjpeg( $file['tmp_name'] ) ) {
						return $file;
					}

					// Get the JPEG quality setting of the original image
					if ( $imagecontent = @file_get_contents( $file['tmp_name'] ) )
						$quality = $this->get_jpeg_quality_wrapper( $imagecontent );
					if ( empty( $quality ) )
						$quality = 90;

					break;

				case 'png':
					if ( !$image = @imagecreatefrompng( $file['tmp_name'] ) ) {
						return $file;
					}
					break;

				default;
					return $file;
			}

			// Run the $image through the watermarker
			$image = $this->watermark( $image );

			// Save the new watermarked image
			switch ( $type ) {
				case 'jpeg':
					imagejpeg( $image, $file['tmp_name'], $quality );
				case 'png':
					imagepng( $image, $file['tmp_name'] );
			}

			imagedestroy( $image );
		}

		return $file;
	}

	// For filters that pass the image as a string
	public function handle_bits( $bits, $file ) {

		// Check file extension
		if ( ! $type = $this->get_type( $file ) ) {
			return $bits;
		}

		// Convert the $bits into an $image
		if ( ! $image = imagecreatefromstring( $bits ) ) {
			return $bits;
		}

		// Run the $image through the watermarker
		$image = $this->watermark( $image );

		// Get the $image back into a string
		ob_start();
		switch ( $type ) {
			case 'jpeg':
				// Get the JPEG quality setting of the original image
				$quality = $this->get_jpeg_quality_wrapper( $bits );
				if ( empty($quality) )
					$quality = 100;

				if ( ! imagejpeg( $image, null, $quality ) ) {
					ob_end_clean();
					return $bits;
				}
				break;
			case 'png':
				if ( ! imagepng( $image ) ) {
					ob_end_clean();
					return $bits;
				}
				break;

			default;
				ob_end_clean();
				return $bits;
		}
		$bits = ob_get_contents();
		ob_end_clean();

		imagedestroy( $image );

		return $bits;
	}

	// Watermarks an $image
	public function watermark( $image ) {

		// Load the watermark into $watermark
		if ( ! $watermark = @imagecreatefrompng( $this->watermark ) ) {
			return $image;
		}

		// Get the original image dimensions
		$image_width  = imagesx( $image );
		$image_height = imagesy( $image );

		// Get the watermark dimensions
		$watermark_width  = imagesx( $watermark );
		$watermark_height = imagesy( $watermark );

		// Calculate watermark location (see docs for help with these filters)
		$dest_x = (int) apply_filters( 'wpcom_watermark_uploads_destx', $image_width - $watermark_width - 5, $image_width, $watermark_width );
		$dest_y = (int) apply_filters( 'wpcom_watermark_uploads_desty', $image_height - $watermark_height - 5, $image_height, $watermark_height );

		// Copy the watermark onto the original image
		imagecopy( $image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height );

		imagedestroy( $watermark );

		return $image;
	}

	// Safety wrapper for our get_jpeg_quality() function
	// See http://blog.apokalyptik.com/2009/09/16/quality-time-with-your-jpegs/
	public function get_jpeg_quality_wrapper( $imagecontent ) {

		$quality = false;

		if ( ! function_exists( 'get_jpeg_quality' ) )
			@include_once( WP_PLUGIN_DIR . '/wpcom-images/libjpeg.php' );

		if ( function_exists( 'get_jpeg_quality' ) )
			$quality = get_jpeg_quality( $imagecontent );

		return $quality;
	}

	// Figure out image type based on filename
	public function get_type( $filename ) {
		$wp_filetype = wp_check_filetype( $filename );
		switch ( $wp_filetype['ext'] ) {
			case 'png':
				return 'png';
			case 'jpg':
			case 'jpeg':
				return 'jpeg';
			default;
				return false;
		}
	}
}

// Start this plugin once everything else is loaded up
add_action( 'init', 'WPcom_Watermark_Uploads', 5 );
function WPcom_Watermark_Uploads() {
	global $WPcom_Watermark_Uploads;
	$WPcom_Watermark_Uploads = new WPcom_Watermark_Uploads();
}

?>

 

La entrada Cómo añadir marcas de agua a tus imágenes fácil y gratis en WordPress la publicó primero Fernando Tellado en Ayuda WordPress. No copies contenido, no dice nada bueno de ti a tus lectores.