Obtener imagen destacada en el índice del blog

9 sept 2012, 20:06:29
Vistas: 18.9K
Votos: 8

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.

0
Todas las respuestas a la pregunta 5
0
15

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 { 
9 sept 2012 20:52:01
0

Sugeriría que cualquiera que haga esto considere los siguientes ajustes:

  1. 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.
  2. Si solo quieres la imagen en tamaño completo, usa wp_get_attachment_url() en lugar de wp_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.

19 feb 2018 18:28:37
0

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!

8 jun 2017 00:45:32
1

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

9 sept 2012 20:38:52
Comentarios

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

Lee Lee
22 ago 2016 13:17:24
0

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;

}
2 abr 2020 16:11:20