Tenho tentado usar a “imagem em destaque” de casa (o índice do blog) sem sorte. está funcionando para todas as páginas, mas “não está funcionando para a página inicial.

O código é parecido com este:

// Don"t use on single posts 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) { ?> // A lot of code... <?php } } 

Já tentei obter a miniatura usando o _thumbnail_id meta. Mesmo resultado.

Este código foi colocado no arquivo de funções, acredito que o problema é que ele “está tentando obter a imagem em destaque do loop / posts.

Muito obrigado.

Resposta

se você está se referindo à “página de postagens”, tente (mostrada apenas a seção relevante de seu código):

if (is_home() && get_option("page_for_posts") ) { $img = wp_get_attachment_image_src(get_post_thumbnail_id(get_option("page_for_posts")),"full"); $featured_image = $img[0]; } else { 

Resposta

Sugiro que alguém que faça isso considere os seguintes ajustes:

  1. Obtenha o ID da página / postagem / índice atual usando get_queried_object(). Para um índice do blog definido como uma página retornará o ID de página correto.
  2. Se tudo o que você deseja for a imagem em tamanho real, use wp_get_attachment_url() em vez de wp_get_attachment_image_src()

Aqui está “uma função rápida que eu” usaria para conseguir isso de uma maneira mais simples:

/** * Custom Featured Image */ function custom_featured_image() { $queried_obj = get_queried_object(); // Don"t use on single posts (JUST FOR THIS DEMO) if ( is_single() ) return; // Get the featured image ID $image_id = get_post_thumbnail_id( $queried_obj->ID ); // Get the URL for the full sized image $image_src = wp_get_attachment_url( $image_id ); return $image_src; } 

Pessoalmente, gosto de evitar lógica condicional aninhada excessiva. Usar uma função pode ajudar nisso.

Resposta

Você tem 2 opções rápidas, por meio do arquivo de modelo usando the_post_thumbnail para o loop. Presumo que você esteja enviando os dados em um formato típico de blog e, portanto, sua função acima não funcionará ou agirá de maneira muito estranha dentro do loop.

Em vez disso, tente algo assim no arquivo de modelo real onde está seu loop principal (talvez index.php ou loop.php):

 //loop starts if ( has_post_thumbnail() ) { the_post_thumbnail(); } //the_content(); and other stuff //loop ends 

Ou se você quiser usar uma ação para alterar o loop principal, pode usar pre_get_posts, por exemplo em seu arquivo 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() ) { //your image code } } 

Observe que o acima está verificando 2 parâmetros, a consulta principal e a página inicial, é muito importante verificar se é a consulta principal, caso contrário, irá alterar todas as consultas.

Referência: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Comentários

  • Você não tem ' t ler a pergunta corretamente, o usuário não ' quer obter as postagens do blog dentro do loop, ele quer a imagem em destaque da página que s atribuído à página de índice do Blog, que é o que eu também quero fazer. has_post_thumbnail() parece funcionar bem em page.php, mas retorna false quando usado em index.php

Resposta

Isso funciona ..

<section 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 isso ajude!

Resposta

Quando você estiver na “página de postagens”, $ post começará com o primeiro “post” do loop. Uma maneira poderia ser usando o “objeto consultado”.

Imprima $ wp_query e você verá: [objeto_queriado] [postagens] [postagem] – nota: objeto_queriado estará / pode estar vazio em algumas páginas

// get_the_post_thumbnail_url( get_queried_object(), "fullsize" ); // or 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() . "/your-path/default-image.jpg"; // or from a default option } return $thumbnail_url; } 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *