Rich Snippets en WordPress

Los rich snippets son el resultado de la inclusión de microformatos en las páginas de resultados de búsqueda de Google que incluyen algún tipo de interactividad por parte de los usuarios que han visitado el sitio web que aparece en los resultados.

El elemento más visible son las estrellas de los sistemas de puntuación que usan sitios como el mismo repositorio de WordPress.org, webs de revisión de películas y sitios así.

Estos rich snippets ofrecen una visibilidad extra al sitio web en la página de resultados, por lo fácilmente identificables, atrayentes, que son las estrellas a color que los identifican, que habitualmente generan más clics hacia los sitios que tienen estos llamativos elementos. Sólo por eso es una buena idea incorporar un sistema de puntuación en tu WordPress que genere estos rich snippets en los resultados de Google.

Vamos a ver algunos … 

  • Author hReview – Quizás el más completo, y hasta la fecha parece que eficaz. Incorpora un sistema completo de revisiones de artículos por parte de los autores del sitio que, además de en tu sitio, muestra estrellas de valoración de las publicaciones
  • Seo ultimate – Este completo plugin de SEO incorpora, entre su multitud de herramientas, un generador de rich snippets, que puedes configurar a tu gusto.
  • GD Star rating – Completo plugin de puntuaciones y revisiones para WordPress, que también puede generar los rich snippets. No obstante, para este uso concreto no lo recomiendo pues es un gran devorador de recursos, quizás de los mayores que hay.
  • Google rich snippets – Plugin especializado en añadir un sistema de valoraciones que genera rich snippets.
  • The SEO rich snippets – Este plugin ofrece un sencillo sistema de revisiones que también se ve reflejado como rich snippets en los resultados de Google

Una vez implantado un sistema puedes comprobar si funcionan los rich snippets en esta herramienta de Google, a sabiendas de que debes esperar un poco, pues no es inmediato.

Varnish y WordPress

Como el otro día comenté algo sobre Varnish y un nuevo plugin, y alguno ya preguntasteis en los comentarios, creo que ya iba siendo hora de explicar lo que es  Varnish, un sistema de cache realmente potente, fantástico para instalaciones WordPress con mucho tráfico, y que como ya puedes imaginar uso aquí en Ayuda WordPress.

Vamos a ello pues …

¿Qué es Varnish?

Varnish Cache es un acelerador web, o un sistema de cache HTTP de reverse proxy. Se instala en cualquier servidor que sirva (vale, es redundante) HTTP y se configura para que cachee sus contenidos. Según algunos estudios acelera el servicio en un 70%.

Cachear una web, por si alguien no lo sabe aún, es almacenar una copia de la misma para que sea la que vean los visitantes futuros. En el caso de Varnish y WordPress, lo que consigue es servir páginas cacheadas (almacenadas) de tu WordPress para que no tenga este que hacer llamadas a la base de datos cada vez que alguien visita tu web. Esto reduce la carga del servidor ya que simplemente sirve una copia única de las páginas a todos los visitantes sin tener que buscar las mismas imágenes y servicios para cada contenido y cada visitante.

Además, Varnish cachea las páginas en memoria virtual, para que tu sitio cargue mucho más rápido, lo que de paso mejora tu SEO, pues Google tiene estimado que por cada medio segundo de tiempo de carga adicional de una web esta recibe una media de un 20% de menos visitantes (fuente). De este modo, reduciendo con Varnish de manera importante el tiempo de carga de página pueden aumentar tus visitas y mejorar tu ranking en los buscadores, algo siempre a tener en cuenta.

La gente de Varnish ha publicado un vídeo muy simple, al tiempo que explicativo que seguro te ilustra sobre lo que hace …

Instalando Varnish

Varnish es un software libre así que no tienes excusas para instalarlo ahora mismo. Se ejecuta en Linux, preferiblemente en FreeBSD, pero puede funcionar igualmente en otras plataformas. Una vez lo instales puedes personalizarlo para definir cuantas peticiones entrantes gestionará mediante el Idioma de Configuración de Varnish (Varnish Configuration Language o VCL).

Varnish está pensado para que sea flexible, para que lo instales pensando en un sitio concreto en mente, y lo adaptes de manera personalizada a el.

Lo ideal es empezar con una configuración básica de Varnish, para más adelante ir probando pequeños cambios y ver como afectan al rendimiento del sitio concreto. Hay varias subrutinas que le dicen a Varnish como responder a las peticiones entrantes y salientes, a los errores, etc.

Así que vamos a empezar con una configuración básica, para luego echar un vistazo a las funciones básicas del VCL y luego ya tu lo tuneas a tu gusto.

Paso a paso

Poner en marcha Varnish es bastante sencillo. Partiendo de una base de, digamos, Apache en un sistema Debian (la mayoría de los servidores Linux), aunque también funciona en el resto, empezaríamos con este comando:

apt-get install varnish

Primero  hay que configurar Apache para que “escuche” el puerto 8080 de localhost. Varnish podrá entonces escuchar el puerto 80 (por donde vienen las visitas). En el archivo /etc/apache2/ports.conf, edita estos ajustes:

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080

Para que se inicie Varnish (por defecto no lo hace), edita lo siguiente en el archivo /etc/default/varnish

START=yes
DAEMON_OPTS=”-a DIRECCION_IP_EXTERNA:80 \
	-T localhost:6082 \
	-f /etc/varnish/default.vcl \
	-S /etc/varnish/secret \
	-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G”

Reemplaza DIRECCION_IP_EXTERNA con la IP de tu dirección IP externa. También puede ser una dirección interna si tu servidor está tras un balanceador de carga o algo como NGINX. Este ajuste controla qué dirección IP y puerto quieres que Varnish escuche y vigile.

Una vez echo lo anterior edita el archivo /etc/varnish/default.vcl, que debería ya existir, con mucho de su contenido comentado (no activo). Empiezaremos por cambiar el backend default.

backend default {
	.host = “127.0.0.1”;</p>
	.port = “8080”;</p>
}

Ahora Varnish ya sabe que Apache está escuchando el puerto 8080 y la interfaz de localhost, para que podamos empezar a usar las funciones. La mayoría del trabajo se  hará con vcl_recv y vcl_fetch, y si no llamas a una acción en esta subrutina y Varnish llega al final, ejecutará el código que encuentre en el archivo default.vcl.

Note: no cachees nunca wp_admin, wp_login, o rutas similares.

Así es como trabaja – las 4 básicas subrutinas de tu configuración de Varnish que necesitas para gestionar peticiones serán:

sub vcl_recv

Esta llamada se hace al comienzo de una petición, y le dice a Varnish qué hacer con esa petición en concreto: si tiene que servirla, cómo servirla, y qué respaldo usar.

Varnish recibe una petición de tu navegador, y entonces vcl_recv decide hacer una de 3 costs con ella: vcl_hash, vcl_pass, y vcl_pipe (ahora lo explico). Puedes cambiar la petición si quieres, alterar las cookies o quitar la cabecera de la petición.

sub vcl_fetch

A vcl_fetch se la llama después de que se haya recuperado un documento con éxito. Usas esto para alterar las cabeceras de respuesta, lanzar el procesamiento ESI o para tratar de alternar entre servidores de respaldo si falla la petición.

El objeto solicitado, req, está todavía disponible, y ahí también  hay una respuesta de respaldo, beresp, que contiene las cabeceras HTTP del respaldo.

sub vcl_hash

Puedes llamar al hash_data del dato que quieras añadir al hash. Esta subrutina puede terminar con una llamada a return() con una de estas keywords: hash o proceed.

sub vcl_deliver

Llamas a esto antes de que el objeto cacheado se entregue al cliente. Esto puede terminar con deliver, error code, o restart. Deliver entrega el objeto al cliente, error devuelve el código de error específico al cliente y abandona la petición, restart reiniciará la transacción e incrementará el contador de reinicio.

Acciones

Hay ciertas acciones que puedes realizar en cada subrutina cuando personalizas Varnish:

pass

Pasa la petición y su consiguiente respuesta hacia el servidor de respaldo, sin cachear. Puedes llamar a pass tanto en vcl_recv como en vcl_fetch.

lookup

Se hace la petición desde vcl_recv para entregar contenido desde la cache aunque la petición indique que debe pasarse la misma. Puedes llamar a lookup desde vcl_fetch.

pipe

Desde vcl_recv, pipe cortocircuita al cliente y las conexiones de respaldo, y Varnish simplemente se queda ahí pasando los datos a un lado y a otro, registrando los datos, así que los registros serán incompletos. Ten cuidado ya que un cliente HTTP 1.1 puede enviar varias peticiones en la misma conexión, y así podrías hacer que Varnish añada una cabecera “Connection:close” antes de hacer la llamada a la pila de conexiones.

deliver

Entrega el objeto cacheado al cliente. Normalmente se le hace la llamada desde vcl_fetch.

esi

Hace un proceso ESI del documento adquirido.

Si quieres saber más sobre VCL no te pierdas este tutorial, que también contiene funciones que puedes realizar en tu sitio.

Configuraciones de ejemplo

Espero que estés aprendiendo algo (o mucho) de Varnish, pero la mejor manera de empezar a jugar con el es ver algunos ficheros de configuración de ejemplo.

La web de la comunidad de Varnish tiene una enorme colección de configuraciones de ejemplo, que son un buen sitio para empezar a hacer las tuyas. Incluso hay algunas configuraciones de ejemplo estupendas para WordPress de fetch y receive en Github.

Creo que llegado este punto huelga decir que Varnish es muy personalizable, y que puede hacer maravillas para cualquier instalación WordPress, especialmente las de alto tráfico. También, hay que reconocerlo, tampoco es para cualquiera, al menos hay que tener conocimientos de conexión con servidores mediante Linux.

Lo mejor es que, con poco esfuerzo y gratis, puedes configurar una cache realmente potente con Varnish, basándote en los permisos de usuario, en el tipo de usuario o lo que se te ocurra.

Si quieres más pruebas del poder de Varnish, no solo Ayuda WordPress lo usa, también Facebook, y creo que no hay mejor prueba de web de alto tráfico que esta tremenda red social ¿no crees?.

Plugins WordPress

Hay, como ya comenté hace días, plugins WordPress que te permiten configurar o gestionar el comportamiento de Varnish en WordPress, los que encontrarás serán estos:

Bueno que ¿te animas a probar Varnish o ya lo has usado?

Eliminar los atributos de ancho y alto del cargador de archivos WordPress

Pensarás que es una chorrada pero no, no es ninguna tontería, y te lo voy a explicar … si es que quieres estar al día claro. Si eres de los antiguos y no quieres progresar pasa de esta entrada.

Como ya sabrás, al insertar una imagen desde el cargador de archivos en el editor de WordPress se añaden automáticamente los atributos HTML width y height que indican el tamaño en el que se mostrará la imagen en tu tema activo, para eso, para que se adapte al ancho del tema y no quede horrible, pero esto ya lo sabías ¿no?.

Pues bien, esto ya es cosa antigua …

Con los nuevos diseños adaptables (o como se les denomina en inglés “responsive“), que se adaptan al navegador e incluso dispositivo desde el que se está visualizando una web, no tiene sentido definir atributos fijos de ancho y alto de imágenes, pues el tema se adaptará, como todos los elementos del contenido, al tamaño del dispositivo lector, sea este un ordenador, un smartphone o un iPad, mola ¿eh?.

¿Entiendes ya porque es posible que sea interesante eliminar – por defecto – los atributos width y height que el cargador de archivos inserta en el editor?. Pues eso, que si usas un tema con diseño adaptable no necesitas algo como esto:

<img src="ruta/a/tu/imagen" width="500" height="600" class="aligncenter size-full" alt="" title="">

Para eliminar por defecto los atributos que te sobrarán en un diseño adaptable sólo tienes que añadir el siguiente código al archivo functions.php de tu tema:

add_filter( 'post_thumbnail_html', 'remove_width_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_width_attribute', 10 );

function remove_width_attribute( $html ) {
    $html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
    return $html;
}

Guardas y ya está. La próxima vez que insertes una imagen en tu editor ya no añadirá los atributos width y height, que de eso ya se ocupará tu tema adaptable (o “responsive“, como prefieras llamarlo)

Establecer varias imágenes destacadas a la vez

A mi me pasó, así que ¿por qué no te ha podido pasar a ti?. Me refiero a que la utilidad de mostrar imágenes destacadas, la función post-thumbnails disponible desde WordPress 2.9 está muy bien pero si tu tema anterior no las soportaba o no las usabas ¿a que es un coñazo añadir imágenes destacadas una a una a las viejas entradas?.

Pues la solución es sencilla … 

En vez de ir editando cada entrada y definiendo una imagen destacada para cada una ¡por fin vas a sacar utilidad a la pantalla de la librería multimedia!, si, esa pantalla, la gran desconocida, casi inútil la mayor parte del tiempo.

Lo primero que tienes que hacer es instalar y activar este plugin, luego te pasas por la Librería Multimedia y, bajo cada imagen, tendrás un nuevo enlace para usarla como destacada para la entrada a la que está asociada (en la que se adjuntó).

Así de sencillo, rápido y efectivo. Vamos, como todo en WordPress.

Lista completa de archivos por defecto de WordPress

Seguramente sea una recopilación algo boba pero nunca se sabe cuando puedes necesitar tener a mano la lista completa de los archivos por defecto de WordPress.

Una posibilidad es comprobar si algún troyano, por ejemplo, ha añadido archivos a cualquiera de las carpetas, se me ocurre.

En cualquier caso no está de más tenerla presente …

Aquí tienes la estructura de archivos y carpetas de WordPress (en su versión 3.3.2)

Estructura básica de carpetas de WordPress

/wordpress/

	/wp-admin/
		/css/
		/images/
		/includes/
		/js/
		/maint/
		/network/
		/user/

	/wp-content/
		/plugins/
			/akismet/
		/themes/
			/twentyeleven/
				/colors/
				/images/
				/inc/
					/images/
				/js/
				/languages/
			/twentyten/
				/images/
					/headers/
				/languages/

	/wp-includes/
		/Text/
		/css/
		/images/
			/crystal/
			/smilies/
			/wlw/
		/js/
			/crop/
			/imgareaselect/
			/jcrop/
			/jquery/
				/ui/
			/plupload/
			/scriptaculous/
			/swfupload/
				/plugins/
			/thickbox/
			/tinymce/
				/langs/
				/plugins/
					/directionality/
					/fullscreen/
					/inlinepopups/
						/skins/
							/clearlooks2/
								/img/
					/media/
						/css/
						/js/
					/paste/
						/js/
					/spellchecker/
						/classes/
							/utils/
						/css/
						/img/
						/includes/
					/tabfocus/
					/wordpress/
						/css/
						/img/
					/wpdialogs/
						/js/
					/wpeditimage/
						/css/
						/img/
						/js/
					/wpfullscreen/
					/wpgallery/
						/img/
					/wplink/
				/themes/
					/advanced/
						/img/
						/js/
						/skins/
							/default/
								/img/
							/highcontrast/
							/o2k7/
								/img/
							/wp_theme/
								/img/
				/utils/
		/pomo/
		/theme-compat/

Archivos de la carpeta raíz de WordPress

/wordpress/
	index.php
	license.txt
	readme.html
	wp-activate.php
	wp-app.php
	wp-blog-header.php
	wp-comments-post.php
	wp-config-sample.php
	wp-cron.php
	wp-links-opml.php
	wp-load.php
	wp-login.php
	wp-mail.php
	wp-pass.php
	wp-register.php
	wp-settings.php
	wp-signup.php
	wp-trackback.php
	xmlrpc.php

Archivos de la carpeta wp-admin

/wp-admin/
	about.php
	admin-ajax.php
	admin-footer.php
	admin-functions.php
	admin-header.php
	admin-post.php
	admin.php
	async-upload.php
	comment.php
	credits.php
	/css/
		colors-classic.css
		colors-classic.dev.css
		colors-fresh.css
		colors-fresh.dev.css
		farbtastic.css
		file-list.txt
		ie-rtl.css
		ie-rtl.dev.css
		ie.css
		ie.dev.css
		install.css
		install.dev.css
		media-rtl.css
		media-rtl.dev.css
		media.css
		media.dev.css
		wp-admin-rtl.css
		wp-admin-rtl.dev.css
		wp-admin.css
		wp-admin.dev.css
	custom-background.php
	custom-header.php
	edit-comments.php
	edit-form-advanced.php
	edit-form-comment.php
	edit-link-form.php
	edit-tag-form.php
	edit-tags.php
	edit.php
	export.php
	freedoms.php
	gears-manifest.php
	/images/
		align-center.png
		align-left.png
		align-none.png
		align-right.png
		archive-link.png
		arrows-dark-vs.png
		arrows-dark.png
		arrows-vs.png
		arrows.png
		blue-grad.png
		bubble_bg-rtl.gif
		bubble_bg.gif
		button-grad-active.png
		button-grad.png
		comment-grey-bubble.png
		date-button.gif
		ed-bg-vs.gif
		ed-bg.gif
		fade-butt.png
		fav-arrow-rtl.gif
		fav-arrow.gif
		fav-vs.png
		fav.png
		generic.png
		gray-grad.png
		gray-star.png
		icons32-vs.png
		icons32.png
		imgedit-icons.png
		list.png
		loading-publish.gif
		loading.gif
		logo-ghost.png
		logo-login.png
		logo.gif
		marker.png
		mask.png
		media-button-image.gif
		media-button-music.gif
		media-button-other.gif
		media-button-video.gif
		media-button.png
		menu-arrow-frame-rtl.png
		menu-arrow-frame.png
		menu-arrows.gif
		menu-bits-rtl-vs.gif
		menu-bits-rtl.gif
		menu-bits-vs.gif
		menu-bits.gif
		menu-dark-rtl-vs.gif
		menu-dark-rtl.gif
		menu-dark-vs.gif
		menu-dark.gif
		menu-shadow-rtl.png
		menu-shadow.png
		menu-vs.png
		menu.png
		no.png
		press-this.png
		required.gif
		resize-rtl.gif
		resize.gif
		screen-options-toggle-vs.gif
		screen-options-toggle.gif
		screenshots
		se.png
		sort.gif
		star.png
		toggle-arrow-rtl.gif
		toggle-arrow.gif
		upload-classic.png
		upload-fresh.png
		wheel.png
		white-grad-active.png
		white-grad.png
		widgets-arrow-vs.gif
		widgets-arrow.gif
		wordpress-logo.png
		wp-badge.png
		wp-logo-vs.png
		wp-logo.png
		wpspin_dark.gif
		wpspin_light.gif
		xit.gif
		yes.png
	import.php
	/includes/
		admin.php
		bookmark.php
		class-ftp-pure.php
		class-ftp-sockets.php
		class-ftp.php
		class-pclzip.php
		class-wp-comments-list-table.php
		class-wp-filesystem-base.php
		class-wp-filesystem-direct.php
		class-wp-filesystem-ftpext.php
		class-wp-filesystem-ftpsockets.php
		class-wp-filesystem-ssh2.php
		class-wp-importer.php
		class-wp-links-list-table.php
		class-wp-list-table.php
		class-wp-media-list-table.php
		class-wp-ms-sites-list-table.php
		class-wp-ms-themes-list-table.php
		class-wp-ms-users-list-table.php
		class-wp-plugin-install-list-table.php
		class-wp-plugins-list-table.php
		class-wp-posts-list-table.php
		class-wp-terms-list-table.php
		class-wp-theme-install-list-table.php
		class-wp-themes-list-table.php
		class-wp-upgrader.php
		class-wp-users-list-table.php
		comment.php
		continents-cities.php
		dashboard.php
		deprecated.php
		export.php
		file.php
		image-edit.php
		image.php
		import.php
		list-table.php
		manifest.php
		media.php
		menu.php
		meta-boxes.php
		misc.php
		ms-deprecated.php
		ms.php
		nav-menu.php
		plugin-install.php
		plugin.php
		post.php
		schema.php
		screen.php
		taxonomy.php
		template.php
		theme-install.php
		theme.php
		update-core.php
		update.php
		upgrade.php
		user.php
		widgets.php
	index-extra.php
	index.php
	install-helper.php
	install.php
	/js/
		cat.dev.js
		cat.js
		categories.dev.js
		categories.js
		comment.dev.js
		comment.js
		common.dev.js
		common.js
		custom-background.dev.js
		custom-background.js
		custom-fields.dev.js
		custom-fields.js
		dashboard.dev.js
		dashboard.js
		edit-comments.dev.js
		edit-comments.js
		editor.dev.js
		editor.js
		farbtastic.js
		gallery.dev.js
		gallery.js
		image-edit.dev.js
		image-edit.js
		inline-edit-post.dev.js
		inline-edit-post.js
		inline-edit-tax.dev.js
		inline-edit-tax.js
		link.dev.js
		link.js
		media-upload.dev.js
		media-upload.js
		media.dev.js
		media.js
		nav-menu.dev.js
		nav-menu.js
		password-strength-meter.dev.js
		password-strength-meter.js
		plugin-install.dev.js
		plugin-install.js
		post.dev.js
		post.js
		postbox.dev.js
		postbox.js
		revisions-js.php
		set-post-thumbnail.dev.js
		set-post-thumbnail.js
		tags.dev.js
		tags.js
		theme-preview.dev.js
		theme-preview.js
		theme.dev.js
		theme.js
		user-profile.dev.js
		user-profile.js
		utils.dev.js
		utils.js
		widgets.dev.js
		widgets.js
		word-count.dev.js
		word-count.js
		wp-fullscreen.dev.js
		wp-fullscreen.js
		xfn.dev.js
		xfn.js
	link-add.php
	link-manager.php
	link-parse-opml.php
	link.php
	load-scripts.php
	load-styles.php
	/maint/
		repair.php
	media-new.php
	media-upload.php
	media.php
	menu-header.php
	menu.php
	moderation.php
	ms-admin.php
	ms-delete-site.php
	ms-edit.php
	ms-options.php
	ms-sites.php
	ms-themes.php
	ms-upgrade-network.php
	ms-users.php
	my-sites.php
	nav-menus.php
	/network/
		admin.php
		edit.php
		index-extra.php
		index.php
		menu.php
		plugin-editor.php
		plugin-install.php
		plugins.php
		profile.php
		settings.php
		setup.php
		site-info.php
		site-new.php
		site-settings.php
		site-themes.php
		site-users.php
		sites.php
		theme-editor.php
		theme-install.php
		themes.php
		update-core.php
		update.php
		upgrade.php
		user-edit.php
		user-new.php
		users.php
	network.php
	options-discussion.php
	options-general.php
	options-head.php
	options-media.php
	options-permalink.php
	options-privacy.php
	options-reading.php
	options-writing.php
	options.php
	plugin-editor.php
	plugin-install.php
	plugins.php
	post-new.php
	post.php
	press-this.php
	profile.php
	revision.php
	setup-config.php
	theme-editor.php
	theme-install.php
	themes.php
	tools.php
	update-core.php
	update.php
	upgrade-functions.php
	upgrade.php
	upload.php
	/user/
		admin.php
		index-extra.php
		index.php
		menu.php
		profile.php
		user-edit.php
	user-edit.php
	user-new.php
	users.php
	widgets.php

Archivos de la carpeta wp-content

/wp-content/
	index.php
	/plugins/
		/akismet/
			admin.php
			akismet.css
			akismet.gif
			akismet.js
			akismet.php
			legacy.php
			readme.txt
			widget.php
		hello.php
		index.php
	/themes/
		index.php
		/twentyeleven/
			404.php
			archive.php
			author.php
			category.php
			/colors/
				dark.css
			comments.php
			content-aside.php
			content-featured.php
			content-gallery.php
			content-image.php
			content-intro.php
			content-link.php
			content-page.php
			content-quote.php
			content-single.php
			content-status.php
			content.php
			editor-style-rtl.css
			editor-style.css
			footer.php
			functions.php
			header.php
			image.php
			/images/
				comment-arrow-bypostauthor-dark-rtl.png
				comment-arrow-bypostauthor-dark.png
				comment-arrow-bypostauthor-rtl.png
				comment-arrow-bypostauthor.png
				comment-arrow-dark-rtl.png
				comment-arrow-dark.png
				comment-arrow-rtl.png
				comment-arrow.png
				comment-bubble-dark-rtl.png
				comment-bubble-dark.png
				comment-bubble-rtl.png
				comment-bubble.png
				headers
				search.png
				wordpress.png
			/inc/
				/images/
					content-sidebar.png
					content.png
					dark.png
					light.png
					sidebar-content.png
				theme-options.css
				theme-options.js
				theme-options.php
				widgets.php
			index.php
			/js/
				html5.js
				showcase.js
			/languages/
				twentyeleven.pot
			license.txt
			page.php
			readme.txt
			rtl.css
			screenshot.png
			search.php
			searchform.php
			showcase.php
			sidebar-footer.php
			sidebar-page.php
			sidebar.php
			single.php
			style.css
			tag.php
		/twentyten/
			404.php
			archive.php
			attachment.php
			author.php
			category.php
			comments.php
			editor-style-rtl.css
			editor-style.css
			footer.php
			functions.php
			header.php
			/images/
				/headers/
					berries-thumbnail.jpg
					berries.jpg
					cherryblossoms-thumbnail.jpg
					cherryblossoms.jpg
					concave-thumbnail.jpg
					concave.jpg
					fern-thumbnail.jpg
					fern.jpg
					forestfloor-thumbnail.jpg
					forestfloor.jpg
					inkwell-thumbnail.jpg
					inkwell.jpg
					path-thumbnail.jpg
					path.jpg
					sunset-thumbnail.jpg
					sunset.jpg
				wordpress.png
			index.php
			/languages/
				twentyten.pot
			license.txt
			loop-attachment.php
			loop-page.php
			loop-single.php
			loop.php
			onecolumn-page.php
			page.php
			rtl.css
			screenshot.png
			search.php
			sidebar-footer.php
			sidebar.php
			single.php
			style.css
			tag.php

Archivos de la carpeta wp-includes

/wp-includes/
	/Text/
		Diff
		Diff.php
	admin-bar.php
	atomlib.php
	author-template.php
	bookmark-template.php
	bookmark.php
	cache.php
	canonical.php
	capabilities.php
	category-template.php
	category.php
	class-IXR.php
	class-feed.php
	class-http.php
	class-json.php
	class-oembed.php
	class-phpass.php
	class-phpmailer.php
	class-pop3.php
	class-simplepie.php
	class-smtp.php
	class-snoopy.php
	class-wp-admin-bar.php
	class-wp-ajax-response.php
	class-wp-editor.php
	class-wp-error.php
	class-wp-http-ixr-client.php
	class-wp-walker.php
	class-wp-xmlrpc-server.php
	class-wp.php
	class.wp-dependencies.php
	class.wp-scripts.php
	class.wp-styles.php
	comment-template.php
	comment.php
	compat.php
	cron.php
	/css/
		admin-bar-rtl.css
		admin-bar-rtl.dev.css
		admin-bar.css
		admin-bar.dev.css
		editor-buttons.css
		editor-buttons.dev.css
		jquery-ui-dialog.css
		jquery-ui-dialog.dev.css
		wp-pointer.css
		wp-pointer.dev.css
	default-constants.php
	default-filters.php
	default-widgets.php
	deprecated.php
	feed-atom-comments.php
	feed-atom.php
	feed-rdf.php
	feed-rss.php
	feed-rss2-comments.php
	feed-rss2.php
	feed.php
	formatting.php
	functions.php
	functions.wp-scripts.php
	functions.wp-styles.php
	general-template.php
	http.php
	/images/
		admin-bar-sprite.png
		arrow-pointer-blue.png
		blank.gif
		/crystal/
			archive.png
			audio.png
			code.png
			default.png
			document.png
			interactive.png
			license.txt
			spreadsheet.png
			text.png
			video.png
		down_arrow.gif
		icon-pointer-flag.png
		rss.png
		/smilies/
			icon_arrow.gif
			icon_biggrin.gif
			icon_confused.gif
			icon_cool.gif
			icon_cry.gif
			icon_eek.gif
			icon_evil.gif
			icon_exclaim.gif
			icon_idea.gif
			icon_lol.gif
			icon_mad.gif
			icon_mrgreen.gif
			icon_neutral.gif
			icon_question.gif
			icon_razz.gif
			icon_redface.gif
			icon_rolleyes.gif
			icon_sad.gif
			icon_smile.gif
			icon_surprised.gif
			icon_twisted.gif
			icon_wink.gif
		toggle-arrow.png
		upload.png
		/wlw/
			wp-comments.png
			wp-icon.png
			wp-watermark.png
		wpicons.png
		wpmini-blue.png
		xit.gif
	/js/
		admin-bar.dev.js
		admin-bar.js
		autosave.dev.js
		autosave.js
		colorpicker.dev.js
		colorpicker.js
		comment-reply.dev.js
		comment-reply.js
		/crop/
			cropper.css
			cropper.js
			marqueeHoriz.gif
			marqueeVert.gif
		hoverIntent.dev.js
		hoverIntent.js
		/imgareaselect/
			border-anim-h.gif
			border-anim-v.gif
			imgareaselect.css
			jquery.imgareaselect.dev.js
			jquery.imgareaselect.js
		/jcrop/
			Jcrop.gif
			jquery.Jcrop.css
			jquery.Jcrop.dev.js
			jquery.Jcrop.js
		/jquery/
			jquery.color.dev.js
			jquery.color.js
			jquery.form.dev.js
			jquery.form.js
			jquery.hotkeys.dev.js
			jquery.hotkeys.js
			jquery.js
			jquery.query.js
			jquery.schedule.js
			jquery.serialize-object.js
			jquery.table-hotkeys.dev.js
			jquery.table-hotkeys.js
			suggest.dev.js
			suggest.js
			/ui/
				jquery.effects.blind.min.js
				jquery.effects.bounce.min.js
				jquery.effects.clip.min.js
				jquery.effects.core.min.js
				jquery.effects.drop.min.js
				jquery.effects.explode.min.js
				jquery.effects.fade.min.js
				jquery.effects.fold.min.js
				jquery.effects.highlight.min.js
				jquery.effects.pulsate.min.js
				jquery.effects.scale.min.js
				jquery.effects.shake.min.js
				jquery.effects.slide.min.js
				jquery.effects.transfer.min.js
				jquery.ui.accordion.min.js
				jquery.ui.autocomplete.min.js
				jquery.ui.button.min.js
				jquery.ui.core.min.js
				jquery.ui.datepicker.min.js
				jquery.ui.dialog.min.js
				jquery.ui.draggable.min.js
				jquery.ui.droppable.min.js
				jquery.ui.mouse.min.js
				jquery.ui.position.min.js
				jquery.ui.progressbar.min.js
				jquery.ui.resizable.min.js
				jquery.ui.selectable.min.js
				jquery.ui.slider.min.js
				jquery.ui.sortable.min.js
				jquery.ui.tabs.min.js
				jquery.ui.widget.min.js
		json2.dev.js
		json2.js
		/plupload/
			changelog.txt
			handlers.dev.js
			handlers.js
			license.txt
			plupload.flash.js
			plupload.flash.swf
			plupload.html4.js
			plupload.html5.js
			plupload.js
			plupload.silverlight.js
			plupload.silverlight.xap
		prototype.js
		quicktags.dev.js
		quicktags.js
		/scriptaculous/
			MIT-LICENSE
			builder.js
			controls.js
			dragdrop.js
			effects.js
			scriptaculous.js
			slider.js
			sound.js
			unittest.js
			wp-scriptaculous.js
		swfobject.js
		/swfupload/
			handlers.dev.js
			handlers.js
			license.txt
			/plugins/
				swfupload.cookies.js
				swfupload.queue.js
				swfupload.speed.js
				swfupload.swfobject.js
			swfupload-all.js
			swfupload.js
			swfupload.swf
		/thickbox/
			loadingAnimation.gif
			macFFBgHack.png
			tb-close.png
			thickbox.css
			thickbox.js
		/tinymce/
			/langs/
				wp-langs-en.js
				wp-langs.php
			license.txt
			/plugins/
				/directionality/
					editor_plugin.js
				/fullscreen/
					editor_plugin.js
					fullscreen.htm
				/inlinepopups/
					editor_plugin.js
					/skins/
						/clearlooks2/
							/img/
								alert.gif
								button.gif
								buttons.gif
								confirm.gif
								corners.gif
								drag.gif
								horizontal.gif
								vertical.gif
							window.css
					template.htm
				/media/
					/css/
						media.css
					editor_plugin.js
					/js/
						embed.js
						media.js
					media.htm
					moxieplayer.swf
				/paste/
					blank.htm
					editor_plugin.js
					/js/
						pastetext.js
						pasteword.js
					pastetext.htm
					pasteword.htm
				/spellchecker/
					changelog.txt
					/classes/
						EnchantSpell.php
						GoogleSpell.php
						PSpell.php
						PSpellShell.php
						SpellChecker.php
						/utils/
							JSON.php
							Logger.php
					config.php
					/css/
						content.css
					editor_plugin.js
					/img/
						wline.gif
					/includes/
						general.php
					rpc.php
				/tabfocus/
					editor_plugin.js
				/wordpress/
					/css/
						content.css
					editor_plugin.dev.js
					editor_plugin.js
					/img/
						audio.gif
						embedded.png
						image.gif
						media.gif
						more_bug.gif
						page.gif
						page_bug.gif
						trans.gif
						video.gif
				/wpdialogs/
					editor_plugin.dev.js
					editor_plugin.js
					/js/
						popup.dev.js
						popup.js
						wpdialog.dev.js
						wpdialog.js
				/wpeditimage/
					/css/
						editimage-rtl.css
						editimage.css
					editimage.html
					editor_plugin.dev.js
					editor_plugin.js
					/img/
						delete.png
						image.png
					/js/
						editimage.dev.js
						editimage.js
				/wpfullscreen/
					editor_plugin.js
					fullscreen.htm
				/wpgallery/
					editor_plugin.dev.js
					editor_plugin.js
					/img/
						delete.png
						edit.png
						gallery.png
						t.gif
				/wplink/
					editor_plugin.dev.js
					editor_plugin.js
			/themes/
				/advanced/
					about.htm
					anchor.htm
					charmap.htm
					color_picker.htm
					editor_template.js
					image.htm
					/img/
						colorpicker.jpg
						flash.gif
						gotmoxie.png
						icons.gif
						iframe.gif
						pagebreak.gif
						quicktime.gif
						realmedia.gif
						shockwave.gif
						trans.gif
						video.gif
						windowsmedia.gif
					/js/
						about.js
						anchor.js
						charmap.js
						color_picker.js
						image.js
						link.js
						source_editor.js
					link.htm
					shortcuts.htm
					/skins/
						/default/
							content.css
							dialog.css
							/img/
								buttons.png
								items.gif
								menu_arrow.gif
								menu_check.gif
								progress.gif
								tabs.gif
							ui.css
						/highcontrast/
							content.css
							dialog.css
							ui.css
						/o2k7/
							content.css
							dialog.css
							/img/
								button_bg.png
								button_bg_black.png
								button_bg_silver.png
							ui.css
							ui_black.css
							ui_silver.css
						/wp_theme/
							content.css
							dialog.css
							/img/
								tabs.gif
							ui.css
					source_editor.htm
			tiny_mce.js
			tiny_mce_popup.js
			/utils/
				editable_selects.js
				form_utils.js
				mctabs.js
				validate.js
			wp-mce-help.php
			wp-tinymce.js.gz
			wp-tinymce.php
		tw-sack.dev.js
		tw-sack.js
		wp-ajax-response.dev.js
		wp-ajax-response.js
		wp-list-revisions.dev.js
		wp-list-revisions.js
		wp-lists.dev.js
		wp-lists.js
		wp-pointer.dev.js
		wp-pointer.js
		wplink.dev.js
		wplink.js
	kses.php
	l10n.php
	link-template.php
	load.php
	locale.php
	media.php
	meta.php
	ms-blogs.php
	ms-default-constants.php
	ms-default-filters.php
	ms-deprecated.php
	ms-files.php
	ms-functions.php
	ms-load.php
	ms-settings.php
	nav-menu-template.php
	nav-menu.php
	pluggable-deprecated.php
	pluggable.php
	plugin.php
	/pomo/
		entry.php
		mo.php
		po.php
		streams.php
		translations.php
	post-template.php
	post-thumbnail-template.php
	post.php
	query.php
	registration-functions.php
	registration.php
	rewrite.php
	rss-functions.php
	rss.php
	script-loader.php
	shortcodes.php
	taxonomy.php
	template-loader.php
	/theme-compat/
		comments-popup.php
		comments.php
		footer.php
		header.php
		sidebar.php
	theme.php
	update.php
	user.php
	vars.php
	version.php
	widgets.php
	wlwmanifest.xml
	wp-db.php
	wp-diff.php

Y ya está, si alguna vez quieres saber donde está tal o cual archivo de WordPress ya sabes donde buscar.

Citas como en los diarios digitales

Hay una funcionalidad que siempre me ha encantado en los diarios digitales. Me refiero a los bloques de citas del texto que aparecen en los artículos, pues me parecen un modo genial de resaltar frases clave de una noticia o artículo de opinión.

Esto, en WordPress, solo teníamos la opción de añadir citas dentro del texto, en línea con el mismo, pero eso es cosa del pasado.

Ahora, gracias a Simple pull quote, es sencillo a más no poder. Una vez instales y actives este plugin añade unos nuevos botones al editor de manera que, tras seleccionar el texto a marcar como cita, pulsas el icono de pull quote y ya está, se mostrará en tu entrada como una bonita cita independiente del contenido general, remarcándolo, como en los diarios digitales.

Lo que hacen los iconos del editor es añadir un shortcode que activa la cita en la frase elegida, por lo que como puedes imaginar también puedes usar el shortcode directamente.

El resultado son bonitas citas acompañando tu texto, atrapando la atención del lector y destacando lo importante de tu artículo.

Puedes ver como lo usa un antiguo alumno del Master de WordPress en su blog de periodismo de motor.

Añadir target=”_blank” a todos los enlaces

Por supuesto, hay plugins para convertir todos los enlaces de manera que se abran en nueva ventana o pestaña pero ¿para qué usar plugins cuando puedes hacerlo con una simple función?.

Si eres de los que te gusta que los enlaces sean ‘target="_blank"‘ y no quieres andar modificando cada enlace puedes añadir esta función a tu plugin de funciones o fichero functions.php de tu tema activo:

// Abrir todos los enlaces en ventana nueva
function autoblank($text) {
	$return = str_replace('<a', '<a target="_blank"', $text);
	return $return;
}
add_filter('the_content', 'autoblank');

Guardas los cambios y ya tienes lo que buscabas, todos los enlaces del contenido de las entradas se abrirán en una nueva ventana (o pestaña) del navegador.

Una función WordPress en tu correo, cada día

Si no usas Delicious ni los favoritos de Twitter, si no te gusta suscribirte a feeds RSS o tener blogs favoritos, quizás lo tuyo sea el correo electrónico.

Y como para todo hay opciones, si quieres aprender nuevas funciones WordPress, y recibir una buena referencia cada día en tu email ya tienes un servicio que hace exactamente eso.

The Daily WordPress reference es un servicio sencillo, pero efectivo, que ha iniciado el envío de documentación sobre WordPress por email. Simplemente apuntas tu dirección de correo electrónico y recibirás en tu email una función diaria de WordPress, para hacer tu biblioteca de desarrollador, poco a poco.

Este es un ejemplo de los emails que recibirás … 

En la misma página de suscripción tienes varios ejemplos al final de la misma.

Para todo lo demás, Ayuda WordPress.

Cómo activar entradas destacadas en Twenty Eleven

El tema por defecto de WordPress, Twenty Eleven, tiene incorporada la funcionalidad de entradas destacadas, que las mostrará en un deslizador, pero no es obvio su uso.

Si quieres aprovechar esta funcionalidad no hay ajuste que modificar ni opción que activar, solo tienes que tener en cuenta lo siguiente para activarla:

  1. Crea una nueva página usando como plantilla la denominada “Showcase template” en el widget de “Atributos de página”
  2. En “Ajustes de lectura” de tu WordPress elige mostrar una página estática en portada, y eliges la página recién creada con la plantilla showcase
  3. Marca como “sticky” las entradas que quieres que aparezcan en el deslizador
  4. Añade una imagen destacada en la entrada, que será la que se mostrará en el deslizador. Si la imagen es del tamaño máximo (1000×288 pixels) o mayor se mostrará como fondo del área del deslizador, con el título de la entrada sobre la misma. Si es menor aparecerá a la derecha del área, con el título y el extracto a la izquierda de la misma. También debes saber que si la imagen destacada es igual o mayor que el tamaño máximo, en la plantilla de entrada simple esta reemplazará la imagen de cabecera

Hasta aquí como activar el deslizador, pero este tiene una característica que puedes cambiar. Y es que por defecto no tiene movimiento automático, sino que se muestran unos puntos en los que debes hacer clic para cambiar de una entrada destacada (sticky) a otra.

Si quieres que el deslizador avance automáticamente debes añadir un poco de código, este:

<script type="text/javascript" charset="utf-8">
    // Avance automático del deslizador de Twenty Eleven
    // Fuente: http://pastebin.com/s6JEthVi
    jQuery(document).ready(function(){
        var change_every = 10; // Los segundos que el deslizador tardará en hacer el avance automático
        var current = 1;
        function auto_advance(){
            if(current == -1) return false;
            jQuery('.feature-slider a').eq(current % jQuery('.feature-slider a').length).trigger('click', [true]);
            current++;
        };
        setInterval(function(){auto_advance()}, change_every * 1000);
    });
</script>

Este código debes añadirlo, bien en la plantilla de página de “showcase” o si lo prefieres en el widget de “showcase”, pero sin ponerle título, funcionará igual.

Nota: este truco último no funciona en wordpress.com, pues está limitada la inserción de código script

Modificar .htaccess sin acceso FTP

En ocasiones puedes necesitar acceder al archivo .htaccess de tu servidor por múltiples motivos. Desde añadir reglas de seguridad hasta hacer una redirección necesaria.

Pero ¿qué pasa si te pilla fuera de casa?, sin un cliente FTP disponible, por ejemplo en el ordenador del hotel o el pc de tu prima.

No sufras que hay plugins para todo, hasta para modificar el archivo .htaccess. Vamos a ver algunos …

WP htaccess control – Sencillo pero potente plugin con el que realizar multitud de modificaciones en el fichero .htaccess sin llegar a ser un editor del mismo, aunque también vale para esto. Puedes añadir redirecciones, hacer más seguro tu WordPress y muchísimo más, todo a golpe de clic desde un entorno controlado. Muy recomendable si sabes lo que haces, como siempre.

WP htaccess editor – Este si que es un editor (sencillo) para el archivo .htaccess. No ofrece más, no ofrece menos.

htaccess redirect – Si necesitas hacer redirecciones desde .htaccess este es tu plugin, solo sirve para eso, nada menos.

htaccess secure files – La función de este plugin es asegurar archivos desde el archivo .htaccess, para ello en cada archivo que subes desde el editor puedes asegurarlo simplemente marcando la casilla que añade el plugin y llamada “Secure file”. Cualquier archivo “asegurado” solo será accesible por los perfiles de usuario o IPs que definas en la página de ajustes del plugin. Muy específico pero muy potente.

Configurable hotlink protection – Si quieres protegerte del hotlinking pero no te aclaras editando manualmente el archivo .htaccess este es tu plugin. Con el puedes definir reglas para qué tipo de archivos serán protegidos de esa indeseable práctica, y cual será el comportamiento, qué excepciones tendrán, todo en una sola pantalla de ajustes.

WP 301 – Este plugin también es específico, y te permite añadir redirecciones del tipo 301 sin tener que modificar el fichero .htaccess. Sencillo de usar pero funciona perfectamente.

Ahora bien, si no quieres instalar un plugin específico para este tipo de usos, debes saber que hay algunos plugins que ya incorporan funcionalidades orientadas a la modificación del archivo .htaccess, por ejemplo:

SEO ultimate – Este estupendo plugin para mejorar el SEO de tu WordPress, también añade una pantalla, llamada “File editor” en la que modificar desde tu escritorio ficheros como robots.txt o, cómo no, .htaccess, eso si, aquí a mano, sabiendo lo que haces.

Bulletproof security – También este plugin de seguridad incorpora una utilidad con la que, en este caso, asegurar tu instalación desde el archivo .htaccess e incluso el mismo fichero, añadiendo reglas a varias carpetas de tu instalación de WordPress.

Bueno, estos son los que conozco, si sabes de alguno más nos lo comentas.