Hotfix, parcheando WordPress con estilo

A ninguno se nos escapa que WordPress es un CMS que se actualiza a cada necesidad o vulnerabilidad descubierta. Mediante las actualizaciones de seguridad – a pesar de que a algunos les moleste andar actualizando cada dos por tres – mantenemos WordPress seguro y al día.

Pero hay veces en que algunos fallos tardan en acometerse por parte del equipo de desarrollo, y es aquí donde entra Hotfix.

Este plugin es una especie de parcheador de fallos, que mantiene tu WordPress seguro y al día hasta que salga la próxima versión estable de WordPress o actualización que solucione el fallo en cuestión.

Su uso es sencillo: lo instalas, lo activas y funciona solo, aplicando los parches necesarios para mantener tu WordPress a tono.

Si lo instalas ahora, y dependiendo de tu versión de WordPress instalada, lo que soluciona es lo siguiente:

  • WordPress 3.3
    • Evita que los estilos de plugins y temas se infiltren en el Escritorio
    • Soluciona un fallo para servidores sin soporte preinstalado de JSON
  • WordPress 3.2
    • Incluye soporte de JSON para configuraciones PHP extrañas
  • WordPress 3.1.3
    • Soluciona un fallo que hace que post_status funcione mal si se pasa un array
  • WordPress 3.1
    • Soluciona un fallo que provoca algunas manipulaciones en queries de taxonomías  (como al excluir categorías), y que hace que no funcionen como deberían.
  • WordPress 3.0.5
    • Evita que KSES muestre imágenes recortadas y fallos HTML en los comentarios del Administrador/Editor.

Creo que no hace falta decir que si no estás seguro de necesitarlo mejor no lo instales.

Formulario de acceso donde quieras

Si quieres ofrecer un formulario de acceso a tu sitio WordPress, pero no te gusta usar el widget Meta, o tu tema no trae una plantilla de página al efecto, puedes preparar tu propio shortcode que, insertado en entradas o páginas, permitirá acceder a tu sitio de un modo totalmente integrado en tu tema.

Para ello solo tienes que añadir un pequeño código …

Solo son 2 pasos:

  1. Abres el fichero functions.php de tu tema activo y añades lo siguiente:
    //Shortcode para login donde quieras
    function ayudawp_formulario_login_shortcode() {
    	if ( is_user_logged_in() )
    		return '';
    
    	return wp_login_form( array( 'echo' => false ) );
    }
    
    function ayudawp_add_shortcodes() {
    	add_shortcode( 'ayudawp_formulario_login', 'ayudawp_formulario_login_shortcode' );
    }
    
    add_action( 'init', 'ayudawp_add_shortcodes' );
    

    Guardas los cambios.

  2. Añades el nuevo shortcode en cualquier parte de una entrada o página:
    [ayudawp-formulario-login]

Y ya lo tienes. ¡Que lo disfrutes!

Añadir extensiones (.html o .php) a páginas WordPress

html

Añadir una extensión a la URL de las entradas en WordPress, aunque supongo que ya lo sabes, es tan simple como ir a ‘Ajustes -> Enlaces permanentes‘, ahí eliges la opción de ‘Estructura personalizada‘ y pones /%postname%.html o /%postname%.php, lo que más te guste.

Ahora bien, esta configuración no afecta a las páginas, que quedarán del tipo /%postname%, más feúchas si lo quieres así.

Pero bueno, ya sabes que todo tiene solución sencilla …

Para ello nos valdremos, para no liarnos, de un par de plugins a elegir:

Y no hay nada que hacer, instalas el que necesites, lo activas y ya lo tienes. Creo que huelga decirlo pero por si acaso solo comentar que no funcionan bien si instalas ambos al mismo tiempo.

Simple y efectivo.

Ha sido un placer :)

Instala WordPress sin instalarlo

Vale que es un poco raro el titular pero es que más o menos eso es lo que ofrece Instant WordPress, una aplicación para Windows que permite una instalación de WordPress autoejecutable, o algo así.

Y si ayer veíamos como instalar WordPress sin MySQL hoy damos un paso adelante ¿no?

Lo que hace es, a través de un sencillo proceso de instalación (vale, si, hay que instalar algo, pero no WordPress), poner a tu disposición un WordPress listo para usar de manera local, sin que tengas que hacer instalaciones en tu ordenador de PHP, MySQL o incluso Apache (en realidad si los instala pero al estilo “mobile”). De hecho puedes instalar el WordPress en cualquier carpeta y, si me apuras, incluso en un pendrive.

mysql admin wp cp

Una vez instalado se me ocurre que puede estar muy bien para llevarlo en un disco externo, o un pendrive, y hacer pruebas o muestras a clientes, instalando plantillas, plugins, haciendo pruebas de desarrollo, lo que quieras.

Lo que no sirve es para instalar tu web, pero seguro que encuentras mil y una utilidades para Instant WordPress

Visto en Wwwhatsnew

Cómo redimensionar la imagen featured si utilizas CDN

WordPress enchufadoSi utilizas un CDN como el de Amazon para almacenar tus imágenes, y así optimizar el tiempo de carga de tu blog, tal vez tengas problemas con tu theme si en éste se emplean ciertas funciones que crean archivos en local. Ese es el caso de algunas plantillas que utilizan la función vt_resize para crear una imagene redimensionada de la imagen featured de los posts.

Recordemos que la imagen featured (o thumbnail) se define cuando se publica un post, por lo que el plugin W3 Total Cache se habrá llevado al CDN todas las imágenes asociadas al post en el momento de la publicación y no tendrá cualquier otra que se cree posteriormente (como puede pasar con vt_resize).

Una posible solución es utilizar la función wp_get_attachment_image_src que devuelve un array con la URL, el ancho y la altura de una imagen adjuntada a un post. Si se quiere el src de la imagen se puede obtener con el primer elemento del array devuelto por la funcion.

Recordemos también que una imagen adjuntada a un post es la que se sube a la instalación de WordPress en el momento de publicar el post o con la opción “Add new” del apartado “Media”.

De esa forma, podemos utilizar el siguiente código PHP para redimensionar una imagen a 280×257 por ejemplo:

<?php
$thumb = get_post_thumbnail_id();
$image = wp_get_attachment_image_src($thumb, ‘full’);
?>
<img src=”" width=”280″ height=”257″ alt=”image”/>

Donde $image[0] es el primer elemento del array devuelto por wp_get_attachment_image_src

Con get_post_thumbnail_id se obtiene el ID de la imagen featured (o thumbnail) adjuntada al post. Si no se adjuntó ningún thumbnail, la función devuelve un valor vacio. Para que un theme pueda utilizar imágenes featured, hay que incluir la siguiente sentencia en el archivo functions.php del theme activo (ver Post Thumbnails) o estar activado en una instalación multisite.

add_theme_support( ‘post-thumbnails’ );

[Fuente de la imagen: google.tecnoad.com]


Este blog pertenece a la red Blogpocket Multisite, donde puedes encontrar también: Mariposas en la maleta, Acordes Modernos y Cicuta en la sangre

Listado de posts con imágenes en miniatura

Actualizado 17-9-2011

Logo de WPEl viernes que viene inauguraremos en Blogpocket la sección “La semana en imágenes” que será un resumen gráfico de los más significativo que hemos publicado en los últimos 7 días.

Hoy, dedico esta entrada a explicar cómo lo he implementado.

Para poder mostrar un listado de imágenes (una por cada post), evidentemente lo primero que hay que tener en cuenta es que cada entrada debe llevar asociada una. Para ello, utilizaremos las imágenes en miniatura (thumbnails) que, desde la versión 2.9, es capaz de gestionar WordPress.

Si tienes una instalación “multisite” no te debes preocupar porque tienes la función incluida en el editor de posts (un widget en la columna lateral con el que puedes añadir una “Featured image” o “imagen destacada”). Sin embargo, en una instalación normal tienes que añadir la siguiente instrucción en el archivo functions.php para activarla:

add_theme_support( ‘post-thumbnails’ );

Una vez que tenemos definida una imagen en miniatura (mediante el widgetfeatured image” del editor de posts) solo hay que saber extraerla con el correspondiente código PHP. En el blog Aurea encontrarás una buena explicación acerca de cómo programarlo: Thumbnail en WordPress; Mostrar 5 últimos posts con thumbnails.

Yo he utilizado el plugin Category Thumbnail List para no tener que gastar ninguna neurona. Para mostrar la tabla con las imágenes solo hay que añadir el shortcode siguiente, en cualquier lugar del post:

[categorythumbnaillist September, 10 2011]

Siendo “September, 10 2011″ la fecha a partir de la cual queremos mostrar posts. El plugin originalmente lleva el número ID correspondiente a la categoría de los posts que se quieren mostrar, en lugar de esa fecha. Ese identificativo se obtiene en la página de categorías poniendo el cursor encima de la categoría concreta que se va a utilizar. Esto quiere decir, además, que cuando edites una entrada, cuyo thumbnail va a salir en la galería, tienes que asignarle la categoría con ID “n”. Acuérdate también de poner el nombre del post como título de la imagen, ya que el plugin utiliza el nombre de la imagen para mostrar como descripción cuando se sitúa el cursor encima de ella.

Para configurar el tamaño de las imágenes en miniatura, el plugin añade una página de opciones en la columna de “Settings” del escritorio (yo he escogido 170×170), pero hay que asegurarse de elegir el tamaño miniatura al definir la “featured image“.

WordPress posee una opción de “Media” (galería de elementos multimedia) con la que, una vez definida la “featured image” para cada post, siempre puedes modificar sus características a posteriori (nombre, tamaño, etc.).

El plugin Category Thumbnail List tiene una hoja de estilos CSS con la que puedes adornar la lista totalmente a tu gusto.

Por último, el plugin muestra, debajo de cada imagen, el título del post. Si te parece mejor que la imagen aparezca sola, hay que quitar la siguiente instrucción:

$output .= ‘<a href=”‘ .$link . ‘” title=”‘ .$title . ‘”>’ .$title . ‘</a><br/>’;

Y para mostrar las imágenes que tengan la categoría “n”, hay que cambiar la instrucción:

$myposts = get_posts(‘numberposts=-1&&category=’.$listCatId[1].’&&orderby=’.$categoryThumbnailList_OrderType.’&&order=’.$categoryThumbnailList_Order);

por:

$myposts = get_posts(‘numberposts=-1&&category=n&&orderby=’.$categoryThumbnailList_OrderType.’&&order=’.$categoryThumbnailList_Order);

Si se quieren visualizar solo 9 imágenes, por ejemplo, hay que hacer que el bucle solo se ejecute 9 veces. Para ello, se utiliza la variable $i.

Nótese que para que las imágenes se muestren según el parámetro de fecha del shortcode hay que comparar la fecha del post con la fecha en la que se muestran las imágenes. La del parámetro del shortcode se calcula con la instrucción:

$fecha_lim = $listCatId[1];

Y solo se muestran imágenes si se cumple la condición

($fecha <= $fecha_lim) and ($i<10)

Es decir, cuando la fecha del post es menor que la que lleva el shortcode y todavía no se han visualizado 9 imágenes. La fecha del post es $fecha y se obtiene extrayéndola del post con la sentencia.

$fecha = get_the_date();

Si actualizas alguna vez este plugin, acuérdate de volver a realizar estas dos modificaciones y los posibles cambios en el CSS.

A continuación, puedes descargar el plugin modificado: download.


Este blog pertenece a la red Blogpocket Multisite, donde puedes encontrar también: Mariposas en la maleta, Acordes Modernos y Cicuta en la sangre

Distinto color según el estado de las entradas

Si tienes muchas entradas en tu sitio, especialmente si hay varios usuarios y te toca la labor de aprobar entradas pendientes de revisión, no siempre es suficiente con el texto que así te lo indica.

Un modo genial, además de chulo, de distinguir las entradas por su estado sería que se mostraran en distinto color en la ventana del listado de entradas ¿no?.

Pues conseguirlo es muy sencillo, solo tienes que añadir este código al fichero functions.php de tu tema activo y ya lo tienes:

PHP:
  1. function posts_status_color() {
  2. ?>
  3.   <style>
  4.   .status-draft { background: #FCE3F2 !important; }
  5.   .status-pending { background: #87C5D6 !important; }
  6.   .status-publish { /* por defecto */ }
  7.   .status-future { background: #C6EBF5 !important; }
  8.   .status-private { background: #F2D46F; }
  9.   </style>
  10. <?php
  11. }
  12. add_action('admin_footer','posts_status_color');

Los colores elegidos son de muestra, pero los puedes cambiar por tu hexadecimal preferido como es natural.

WordPress con Timthumb hackeado hacen black hat SEO en Google Images

Según el blog de Unmask Parasites, más de 4.000 sitios WordPress hackeados estarían inundando de imágenes utilizadas para posicionar sitios de falsos antivirus.

Lo que hacen estos indeseables del Black Hat SEO, usando el exploit en Timthumb del que avisé, es lo siguiente …

Con el siguiente patrón de URL: hxxp:///?[a-f]{3}= , donde [a-f]{3} es una combinación de tres letras desde la "a" a la "f" y las son combinaciones de palabras clave separadas por guiones que contienen o imágenes de palabras o imágenes normales, por ejemplo:

hxxp://ejemplo.com/?fef=imágenes-de-mitzi-mueller-wrestling
hxxp://ejemplo.net/?cda=imagen-frutas-tropicales-index

Para ello usan páginas con puerta trasera que introducen en plantillas normales de sitios WordPress, donde el contenido original se reemplaza con unas veinte miniaturas y pequeños bloques de texto relativos a las palabras clave a posicionar.

Las imágenes no están enlazadas desde sitios externos sino que enlazan a imágenes a "tamaño completo" con URLs como estas:

PHP:
  1. /?[a-f]{3}=<keywords><encrypted-key><short-name>.jpg

Por ejemplo:

PHP:
  1. /?fec=imágenes-de-blagojovich-arrestado-Eun8671l43WGQNUa7rKWUdG/5d60kf6AQ4VM4KfPdbfaMro2PNRMVlYmniC50Kh6SJdwMkeSz7s19kggH0WT4j_AYuW36OEWyfkABshi/Tk5R16sYiKUfS8OJGDZ_K7p/WoYUNZZ_Q==uek.jpg

En la parte superior de las imágenes se muestra una inscripción - el nombre de dominio del sitio hacheado. De este modo los indeseables estos hacen parecer que las imágenes pertenecen al sitio que han hackeado, como si fuera contenido propio, no imágenes insertadas o robadas. Al mismo tiempo, de este modo, es más fácil identificar la imagen envenenada en los resultados de búsqueda.

Los archivos de imágen contienen la siguiente cadena en su interior: < CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 100. Esto significa que se crearon usando la biblioteca gráfica GD.

Parece ser que los hackers usan un script PHP para coger imágenes bien posicionadas (en los resultados de búsqueda de Google Imágenes), las redimensionan a tamaño de miniatura (un ancho de entre 200 y 300 pixels) y a tamaño completo (algunas a tamaño aleatorio, en algunos casos incluso a tamaños mayores que la original, para posicionarlas mejor al ser más grandes en pixels) y finalmente añaden el sello del nombre del dominio hackeado.

Marcas temporales

Al fondo del código HTML de las páginas puerta trasera puedes ver comentarios como estos:

PHP:
  1. <!-- 7/24/2011 4:30:03 PM --><!-- new england railroad pictures -->

La marca temporal y las palabras clave. De este modo puedes fácilmente ver cuando se creó la puerta trasera.

Redirecciones

Las páginas puerta trasera tienen buenas posiciones en algunas palabras clave tanto en la búsqueda web de Google como en la de Imágenes (especialmente cuando buscas la frase exacta). Sin embargo, las redirecciones maliciosas ocurren solamente cuando haces clic en el resultado de búsqueda en Google Imágenes, lo que prueba que la meta final es inundar Google Imágenes de estas imágenes, o sea, una campaña pura y dura de black-hat SEO.

La redirección tiene dos etapas. En la primera la redirección va a un servidor intermedio (TDS) que, a continuación, redirige a unas páginas web que lanzan una herramienta antivirus falsa (hay dos variaciones diferentes).

Esta es una cadena real de redirección:

PHP:
  1. 302->hxxp://video.bywhy .com/?k=girdles+pictures&s=google&r=http%3A%2F%2Fwww.google.com%2Fimgres%3Fimgurl%3Dhttp%3A%2F%2Fbcsmusic.me%2F%253Fbdd%253Dgirdles-pictures-Vyhynx%2FbFO_9rUEvfK72isOTIVpmnmzLxnzp51gHqzVXi5I5jE2lyrsssMFcfbwOFoXk3VR8TwxTQeexe%2FonLd6RPIG_M6hkLQMh6ACctX4kzsuwbN5w_6YOYxZYj1AJQl1OBCXNjPYQoA%253D%253Dxy5.jpg%26imgrefurl%3Dhttp%3A%2F%2Fbcsmusic.me%2F%253Fbdd%253Dgirdles-pictures%26usg%3D__6ho2Rtl5S4GcwInf2xzUhPN4vkI%3D%26h%3D439%26w%3D262%26sz%3D98%26hl%3Den%26start%3D19%26zoom%3D1%26um%3D1%26itbs%3D1%26tbnid%3DoHNHWFmQjxIwqM%3A%26tbnh%3D127%26tbnw%3D76%26prev%3D%2Fsearch%253Fq%253Dsite%3Abcsmusic.me%2526um%253D1%2526hl%253Den%2526sa%253DN%2526channel%253Dfs%2526biw%253D1222%2526bih%253D260%2526tbm%253Disch%26ei%3DnU80TtGDG4mE-wa5vPH9DA&d=http%3A%2F%2Fbcsmusic.me%2F%3Fbdd%3Dgirdles-pictures
  2.  
  3. 302->hxxp://update34.svernick .in/index.php?Q0rhQ9S3be5GTHpOM5RNjiUpBaa7CmPerSb+VBBE57iCXCC1iDs+XgOe4qXsg1ggs5uk7Ck1GcwyRZ2vqM7MPVofO5WM3eBmP5tRpBeBu/kPphowRYvnTq2+4BmHNg==

Como puedes ver, el servidor TDS recibe información acerca de las palabras clave, la fuente, y de la URL de referencia.

El dominio intermedio cambia cada día. En realidad pertenecen a otros sitios hackeados (en su mayoría creados con WordPress)

Aquí tienes unos cuantos dominios del TDS intermedio usados en este ataque:

video.bywhy .com
ppopo2.bget .ru
awalstudios .com
demo.hireindians .net
www.privatepilot .hu
footballgirdles .tk

El nombre de dominio de la página web del falso antivirus consiste en un dominio .in que cambia cada día, y unos cuantos subdminios "updateNN" o "scanNN", por ejemplo, "update82.yourscan.in" o "scan73.moomles.in.

Aquí tienes unos cuantos dominios .in de los falsos sitios antivirus usados en este ataque:

spelleit .in
svernick .in
senerino .in
moomles .in
klopster .in
bastandro .in
waspeeds .in
yourscan .in
x-scan .in

La mayoría de los sitios .in apuntan a la dirección IP 193.105.154.31 (Reino unido, con información de contacto de Lituania).

Rango de detección

Los falsos sitios antivirus lanzan ejecutables .exe "scareware" con nombres como InstallSecurityScanner_NNN.exe, o
InstallSecurityScanner_225.exe. Estos archivos se vuelven a re-empaquetar cada día y su rango de detección (según VirusTotal) es bastante bajo. El rango típico de detección para ficheros servidos actualmente es de 8/43 (18,6%). Esto suele mejorar en tanto en cuanto el fichero malicioso no se use y se sirva un nuevo fichero con bajo rango de detección desde el servidor del antivirus.

Como he comentado arriba, y por concretar más, se han detectado 4.358 sitios comprometidos. Actualmente Google ha detectado menos del 5% de los mismos. Si usas la página de diagnóstico de navegación segura de Google te dice algo así:

El software malicioso está alojado en 2 dominio(s), incluyendo bastandro .in/, senerino .in/.

Parece que 3 dominio(s) están funcionando como intermediarios para distribuir malware a los visitantes de este sitio, incluyendo hireindians .net/, awalstudios .com/, bywhy .com/.

Timthumb

Como ya avisé hace unos días, hay que poner al día Timthumb si lo usa tu tema, no hay excusas, más visto lo visto de los resultados ¿no te parece?

.htaccess

Pero no solo Timthumb es el culpable, también se han detectado sitios en los que hackers han creado un .htaccess con reglas de rewrite superiores al directorio raíz del sitio. Las reglas de rewrite mapean las URLs puerta trasera a algún script PHP. Ahí es nada.

Cache

Todas las páginas puerta trasera están cacheadas en alguna parte del servidor. Al contrario que otros ataques de envenamiento SEO estos no se hacen en vivo. Si especificas algunas palabras clave diferentes en la URL obtendrás un error 404. Dicho sea de paso, estas páginas de error 404 son distintas a las normales que tenga el sitio hackeado.

Otra prueba de que el contenido spam está cacheado y de que no se inyecta en la ejecución de páginas activas de WordPress son las marcas temporales en el fondo del código HTML y de las entradas antiguas de la sección de "Entradas recientes". En algunos sitios, en vez de una plantilla real del sitio, usan una plantilla prefabricada de Kubrick con una marca final que no cambia de sitio a sitio sino que es siempre la misma (WordPress 2.3.1, 22 queries, 0.912 seconds).

¿Que hago?

Hay varias comprobaciones y/o acciones que podemos realizar:

  1. Pues lo primero repasar tu fichero .htaccess y elimina cualquier regla de rewrite que no sepas que hace. Ante la duda bórralo y vuelve a guardar la estructura de enlaces permanentes en los Ajustes de WordPress para que se vuelva a crear uno limpio.
  2. Actualiza TimThumb a la versión segura. Ya te he puesto los enlaces a las maneras de hacerlo más arriba, en la entrada que escribí el otro día tienes los distintos modos de hacerlo
  3. Ve a las Herramientas para Webmasters de Google y revisa si tu sitio tiene software malicioso
  4. Instala algún plugin detector de exploits y ejecútalo. Hay varios y buenos "en el repositorio oficial", haz una búsqueda por "exploit"

Que no sea nada ;-)

Gracias a Juan por el aviso

M-shots en WordPress alojado

Hace mucho tiempo, te guste o no, existe en WordPress.com el servicio conocido como Snap Shots, facilitado por 'mshots', mediante el cual, si está activo, puedes ver una captura emergente de una web sobre su enlace ¿a que te suena?.

Pues bien, puedes usar este servicio también en tu WordPress alojado de dos maneras, mediante un código que aprovecha el 'mshots' alojado en WordPress.com, para que no tengas que instalarlo tu mismo y, si lo prefieres, mediante un sencillo plugin.

Vamos a ver las dos maneras de hacerlo …

1. Plugin

Bien sencillo, solo tienes que instalar el plugin Snap Shots para WordPress.org, activarlo y ya podrán ver tus visitantes capturas emergentes de las URLs enlazadas en tus entradas. El resultado es fácil e inmediato.

Solo hay un paso previo, registrarte y obtener un código en la web de Snap Shots

2. Código

El otro modo, más personalizable por supuesto, pasa por añadir un código al fichero functions.php de tu tema activo y luego activar - a voluntad - las capturas (o no) de las URLs que enlaces en tus entradas. Como puedes ya vislumbrar aquí tienes mucho más control sobre el contenido que en la opción de plugin.

Lo primero es añadir este código al fichero functions.php:

PHP:
  1. function aw_snap($atts, $content = null) {
  2.         extract(shortcode_atts(array(
  3.             "captura" => 'http://s.wordpress.com/mshots/v1/', //usamos el servicio ya instalado en wordpress.com
  4.             "url" => 'http://ayudawordpress.com', //url por defecto de las capturas si no modificamos el shortcode
  5.             "alt" => 'Mi sitio',
  6.             "w" => '400', // ancho
  7.             "h" => '300' // alto
  8.         ), $atts));
  9.         $img = '<img src="' . $snap . '' . urlencode($url) . '?w=' . $w . '&h=' . $h . '" alt="' . $alt . '"/>';
  10.         return $img;
  11. }
  12. add_shortcode("snap", "aw_snap");

Con esta función creamos el 'shortcode' que podrás usar en tus entradas y, en caso contrario, hará capturas por defecto de tu propia URL, en este caso a ayudawordpress.com. También definimos una altura y ancho de la captura por defecto, que podemos modificar en cada shortcode si lo deseamos.

Por ejemplo, si en una entrada introducimos esto … 

[captura url="http://ayudawordpress.com/servicios/" alt="Servicios Ayuda WordPress" w="300" h="200"]

Lo que hacemos es introducir una captura de la página de servicios de Ayuda WordPress con un ancho de 300px y un alto de 200px, con lo que modificamos los parámetros por defecto.

Fácil ¿no?

Bueno, pues tu eliges el método, si es que te gusta esto de los "snap shots", a mi personalmente me horroriza.

Miniatura enlazada al permalink

WordPress nos permite incluir miniaturas en la portada de nuestro sitio de manera sencilla, pero por defecto esa miniatura no enlaza al enlace permanente.

Si quieres que las miniaturas, o imágenes destacadas si así prefieres llamarlas, tengan un enlace al permalink de la entrada solo tienes que añadir el siguiente código en el fichero functions.php de tu tema activo:

PHP:
  1. add_filter( 'post_thumbnail_html', 'wps_post_thumbnail', 10, 3 );
  2. function wps_post_thumbnail( $html, $post_id, $post_image_id ) {
  3.   $html = '<a href="' . get_permalink( $post_id ) . '" title="' . esc_attr( get_post_field( 'post_title', $post_id ) ) . '">' . $html . '</a>';
  4.   return $html;
  5. }

Luego, sería conveniente hacer un ajuste en el loop de modo que si no hay miniaturas no se trate de enlazar al permalink de cualquier manera, este:

PHP:
  1. <?php
  2. if ( has_post_thumbnail()) {
  3.   echo '<a href="' . get_permalink($post->ID) . '">';
  4.   the_post_thumbnail( 'title-image', array( 'class' => 'title-image', 'alt' => 'Title Icon' );
  5.   echo '</a>';
  6. }
  7. ?>

Estupendo truco de WordPress Arena que mejora las indicaciones del Codex.