Ho “provato a utilizzare l ” immagine in primo piano “dalla home (lindice del blog) senza fortuna.” funziona per ogni singola pagina, ma non per la home.

Il codice ha un aspetto simile a questo:

// 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 } } 

Ho già provato a ottenere la miniatura utilizzando il meta _thumbnail_id . Stesso risultato.

Questo codice viene inserito sul file functions, credo che il problema sia che sta cercando di ottenere limmagine in evidenza del loop / dei post.

Grazie mille in anticipo.

Risposta

se ti riferisci alla “pagina dei post”, prova (viene mostrata solo la sezione pertinente del tuo codice):

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 { 

Risposta

Suggerirei a chiunque lo faccia di prendere in considerazione i seguenti aggiustamenti:

  1. Ottieni lID della pagina / post / indice corrente utilizzando get_queried_object(). Per un indice del blog impostato su una pagina, restituirà lID della pagina corretto.
  2. Se tutto ciò che desideri è unimmagine a grandezza naturale, utilizza wp_get_attachment_url() invece di wp_get_attachment_image_src()

Ecco “una funzione rapida che” userei per ottenere questo risultato in modo più semplice:

/** * 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; } 

Personalmente preferisco evitare uneccessiva logica condizionale annidata, luso di una funzione può aiutare in questo.

Risposta

Sono disponibili 2 opzioni rapide, tramite il file modello utilizzando the_post_thumbnail per il ciclo. Presumo che tu stia trasmettendo i dati in un tipico formato di blog e quindi la tua funzione sopra non funzionerà o si comporterà in modo molto strano allinterno del ciclo.

Prova invece qualcosa di simile nel file modello effettivo dove si trova il tuo ciclo principale (forse index.php o loop.php):

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

O se vuoi usare unazione invece di alterare il ciclo principale puoi usare pre_get_posts, ad esempio nel file functions.php.

Qualcosa del tipo:

add_action( "pre_get_posts", "add_featured_image" ); function add_featured_image( $query ) { if( $query->is_main_query() && $query->is_home() ) { //your image code } } 

Nota che quanto sopra sta controllando 2 parametri, la query principale e la home page, è molto importante controllare se è la query principale, altrimenti altererà tutte le query.

Riferimento: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Commenti

  • Non hai ' t leggere la domanda correttamente, lutente non ' vuole ricevere i post del blog allinterno di theloop, vuole limmagine in primo piano della pagina che è assegnato alla pagina di indice del blog, che è quello che voglio fare anchio. has_post_thumbnail() sembra funzionare bene su page.php, ma restituisce false se utilizzato in index.php

Risposta

Funziona ..

<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").")"; } ?>;"> 

Spero che questo aiuti!

Risposta

Quando sei nella “pagina dei post” $ post inizierà con il primo “post” nel ciclo. Un modo potrebbe essere quello di utilizzare l “oggetto interrogato”.

Stampa $ wp_query e vedrai: [oggetto_querificato] [post] [post] – nota: loggetto_queried sarà / potrebbe essere vuoto in alcune pagine

// 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; } 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *