Pokoušel jsem se bez úspěchu použít „doporučený obrázek“ z domova (index blogu). “ pracuje pro každou stránku, ale nefunguje pro domov.
Kód vypadá asi takto:
// 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 } }
Už jsem se pokusil získat miniaturu pomocí metriky _thumbnail_id . Stejný výsledek.
Tento kód je umístěn v souboru funkcí se domnívám, že problém spočívá v tom, že se pokouší získat obrázek ve smyčce / příspěvcích.
Předem moc děkuji.
Odpověď
pokud odkazujete na „stránku pro příspěvky“, zkuste to (zobrazí se pouze relevantní část vašeho kódu):
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 {
Odpověď
Navrhuji, aby to kdokoli provedl, zvažte následující úpravy:
- Získejte ID aktuální stránky / příspěvku / indexu pomocí
get_queried_object()
. index blogu, který je nastaven na stránku, vrátí správné ID stránky. - Pokud chcete pouze obrázek v plné velikosti, použijte
wp_get_attachment_url()
namístowp_get_attachment_image_src()
Zde je rychlá funkce, kterou bych mohl použít k dosažení jednoduššího způsobu:
/** * 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; }
Osobně se rád vyhýbám nadměrné vnořené podmíněné logice, použití funkce mi s tím může pomoci.
Odpovědět
Máte 2 rychlé možnosti, a to prostřednictvím souboru šablony pomocí smyčky the_post_thumbnail
. Předpokládám, že vaše výstup dat v typickém formátu blogu a tedy vaše výše uvedená funkce nebude ve smyčce fungovat nebo se chovat velmi divně.
Místo toho zkuste něco podobného ve skutečném souboru šablony, kde je vaše hlavní smyčka (možná index.php nebo loop.php):
//loop starts if ( has_post_thumbnail() ) { the_post_thumbnail(); } //the_content(); and other stuff //loop ends
Nebo pokud chcete místo toho použít akci ke změně hlavní smyčky, můžete použít pre_get_posts
, například ve vašem souboru functions.php.
Něco jako:
add_action( "pre_get_posts", "add_featured_image" ); function add_featured_image( $query ) { if( $query->is_main_query() && $query->is_home() ) { //your image code } }
Všimněte si, že výše uvedené kontroluje 2 parametry, hlavní dotaz a domovskou stránku, je velmi důležité zkontrolovat, zda se jedná o hlavní dotaz, jinak to změní všechny dotazy.
Odkaz: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Komentáře
- Nemáte ' t správně si přečetl otázku, uživatel ' nechce dostávat příspěvky blogu do smyčky, chce zobrazený obrázek stránky, která s přiřazeno indexové stránce blogu, což je také to, co chci udělat. Zdá se, že
has_post_thumbnail()
na page.php funguje dobře, ale vrátífalse
při použití v index.php
Odpověď
To funguje ..
<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").")"; } ?>;">
Doufám, že to pomůže!
Odpověď
Když jste na „stránce s příspěvky“, $ post začne s prvním „příspěvkem“ ve smyčce. Jedním ze způsobů může být použití „dotazovaného objektu“.
Vytiskněte $ wp_query a uvidíte: [queried_object] [posty] [post] – poznámka: queried_object bude / může být na některých stránkách prázdný
// 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; }