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:
- 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. - Se tutto ciò che desideri è unimmagine a grandezza naturale, utilizza
wp_get_attachment_url()
invece diwp_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 restituiscefalse
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; }