Cómo solucionar el problema de the_post_thumbnail que escala en lugar de recortar
Recientemente quise mejorar mi blog con imágenes destacadas/miniaturas de publicaciones. Estoy usando un tema personalizado basado en el tema Roots (esto no es un problema del tema Roots, creo). La imagen que subo es de 1024x768 y debería recortarse al formato letterbox 1024x512.
Este es el código que estoy usando en el archivo del tema:
<?php
if ( has_post_thumbnail() ) {
the_post_thumbnail(array(1024, 512), array('class' => 'img-responsive')); // añade la miniatura del post
}
?>
Ahora, el problema es que en mi instalación local con XAMPP funciona perfectamente. Pero en el servidor web las imágenes no se recortan y no abarcan todo el ancho del área de contenido principal, como lo hacen en la instalación local. Al revisar el código con Firebug, la imagen tiene 682px de ancho y 512px de alto (en XAMPP es 1024 x 512px). Lo que sucede es que la imagen se escala, no se recorta.
Volví a subir el tema y desactivé todos los plugins. Por supuesto también busqué temas relacionados, probé otros ejemplos de código, verifiqué que GD esté habilitado (lo está) y regeneré las miniaturas. Nada de esto resolvió el problema.
Agradecería cualquier idea para solucionarlo.

Según la entrada del Codex para the_post_thumbnail()
, pasar un array no ha funcionado desde WordPress 3.0:
POR FAVOR TENGA EN CUENTA: El recorte no funciona en WP 3.0+. Todo lo que se necesita para WP 3.0+ es la llamada para la miniatura de la publicación. Luego proceda a medios en el panel de control y configure su miniatura para recortar al tamaño que desee utilizar.
La implementación correcta es crear un tamaño de imagen personalizado con los valores de su array, mediante add_image_size()
dentro de la función de configuración del Tema (o cualquier otra devolución de llamada enganchada a after_setup_theme
):
add_image_size( 'custom-size', 1024, 512, true );
...y luego llamar a ese tamaño directamente:
the_post_thumbnail( 'custom-size' );

Normalmente, si deseas recortar una miniatura, debes especificarlo usando "true" como tercer parámetro.
array(1024, 512, true)
Al menos así es como se hace si has definido un tamaño de imagen miniatura en tu functions.php. Así que supongo que debería funcionar también en el array de the_post_thumbnail :) Bueno, y si no funciona, siempre podrías definir un tamaño de miniatura en tu functions.php y usar ese...
Aquí tienes una referencia: http://codex.wordpress.org/Function_Reference/set_post_thumbnail_size

Esto es lo que resolvió el problema (quizás no sea la solución más elegante, pero funciona por el momento):
En custom.php (el functions.php del tema roots) agregué esto:
if ( function_exists( 'add_theme_support' ) ) {
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size(1024, 512, true);
}
En el archivo del tema donde debe aparecer la imagen destacada agregué esto:
if ( has_post_thumbnail() ) {
the_post_thumbnail(array(1024, 512, true), array('class' => 'img-responsive')); // añadir imagen destacada
}
?>
Lo que no entiendo es que ninguno funciona sin el otro. De cualquier forma, resuelve el problema por ahora.
