Obtener imagen destacada en el índice del blog
He estado intentando usar la "imagen destacada" desde la página de inicio (el índice del blog) sin éxito. Funciona para cada página individual, pero no funciona para la página principal.
El código se ve algo así:
// No usar en entradas individuales
if (!is_single()) {
if (is_home()) {
if (function_exists('wp_get_attachment_thumb_url')) {
$img = wp_get_attachment_image_src(get_post_thumbnail_id(),'full');
$featured_image = $img[0];
}
} else {
if (function_exists('wp_get_attachment_thumb_url') && has_post_thumbnail()) {
$img = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full');
$featured_image = $img[0];
}
}
if ($featured_image) { ?>
// Mucho código...
<?php }
}
Ya intenté obtener la miniatura usando el meta _thumbnail_id. Mismo resultado.
Este código está colocado en el archivo de funciones, creo que el problema es que está intentando obtener la imagen destacada del loop/entradas.
Muchas gracias de antemano.

Si te refieres a la 'página para entradas', entonces prueba (solo se muestra la sección relevante de tu código):
if (is_home() && get_option('page_for_posts') ) {
// Obtiene la imagen destacada de la página de entradas configurada en WordPress
$img = wp_get_attachment_image_src(get_post_thumbnail_id(get_option('page_for_posts')),'full');
$featured_image = $img[0];
} else {

Sugeriría que cualquiera que haga esto considere los siguientes ajustes:
- Obtener el ID de la página/entrada/índice actual usando
get_queried_object()
. Para un índice de blog configurado como página, esto devolverá el ID de página correcto. - Si solo quieres la imagen en tamaño completo, usa
wp_get_attachment_url()
en lugar dewp_get_attachment_image_src()
Aquí hay una función rápida que usaría para lograr esto de manera más simple:
/**
* Imagen destacada personalizada
*/
function custom_featured_image() {
$queried_obj = get_queried_object();
// No usar en entradas individuales (SOLO PARA ESTE EJEMPLO)
if ( is_single() ) return;
// Obtener el ID de la imagen destacada
$image_id = get_post_thumbnail_id( $queried_obj->ID );
// Obtener la URL de la imagen en tamaño completo
$image_src = wp_get_attachment_url( $image_id );
return $image_src;
}
Personalmente prefiero evitar lógica condicional excesivamente anidada, usar una función puede ayudar con esto.

Esto funciona...
<section id="banner" style="background-image: <?php if (is_home() && get_option('page_for_posts') ) {
$blog_home_id = get_option( 'page_for_posts' );
echo 'url('.get_the_post_thumbnail_url($blog_home_id, 'full').')';
} else {
echo 'url('.get_the_post_thumbnail_url($post->ID, 'full').')';
}
?>;">
¡Espero que esto ayude!

Tienes 2 opciones rápidas, a través del archivo de plantilla usando the_post_thumbnail
para el bucle. Asumo que estás mostrando los datos en un formato típico de blog y por lo tanto tu función anterior no funcionará o se comportará de manera muy extraña dentro del bucle.
En su lugar, prueba algo como esto en el archivo de plantilla donde está tu bucle principal (puede ser index.php o loop.php):
//inicio del bucle
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
//the_content(); y otras cosas
//fin del bucle
O si prefieres usar una acción para modificar el bucle principal, puedes usar pre_get_posts
, por ejemplo en tu archivo functions.php.
Algo como:
add_action( 'pre_get_posts', 'add_featured_image' );
function add_featured_image( $query ) {
if( $query->is_main_query() && $query->is_home() ) {
//tu código para la imagen
}
}
Observa que lo anterior está verificando 2 parámetros, la consulta principal y la página de inicio, es muy importante verificar si es la consulta principal, de lo contrario modificará todas las consultas.
Referencia:http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

No has leído la pregunta correctamente, el usuario no quiere obtener las entradas del blog dentro del loop, quiere la imagen destacada de la página asignada como índice del blog, que es lo que yo también quiero hacer. has_post_thumbnail()
parece funcionar bien en page.php, pero devuelve false
cuando se usa en index.php

Cuando estás en la "página de entradas" (posts page), $post comenzará con la primera "entrada" en el bucle. Una forma de hacerlo podría ser utilizando el "objeto consultado" (queried object).
Si imprimes $wp_query verás: [queried_object] [posts] [post] -- nota: queried_object puede estar vacío en algunas páginas
// get_the_post_thumbnail_url( get_queried_object(), 'fullsize' );
// o
function ABC_get_the_thumbnail_url() {
$queried_object = get_queried_object();
$thumbnail_url = get_the_post_thumbnail_url( $queried_object, 'fullsize' );
if ( ! $thumbnail_url ) {
return get_template_directory_uri() . '/tu-ruta/imagen-por-defecto.jpg';
// o desde una opción por defecto
}
return $thumbnail_url;
}
