Próbowałem użyć „wyróżnionego obrazu” z domu (indeksu bloga) bez powodzenia. To ” działa na każdej stronie, ale nie działa w domu.
Kod wygląda mniej więcej tak:
// 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 } }
Próbowałem już uzyskać miniaturę za pomocą mety _thumbnail_id . Ten sam wynik.
Ten kod został umieszczony w pliku functions, wydaje mi się, że problem polega na tym, że próbuje on uzyskać obraz z pętli / postów.
Z góry dziękuję.
Odpowiedź
jeśli odwołujesz się do „strony z postami”, spróbuj (pokazana jest tylko odpowiednia sekcja kodu):
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 {
Odpowiedź
Proponuję każdemu, kto to robi, rozważenie następujących poprawek:
- Uzyskaj identyfikator bieżącej strony / posta / indeksu za pomocą
get_queried_object()
. indeks bloga, który „jest ustawiony na stronę”, zwróci prawidłowy identyfikator strony. - Jeśli chcesz tylko pełnowymiarowego obrazu, użyj
wp_get_attachment_url()
zamiastwp_get_attachment_image_src()
Oto „szybka funkcja, której użyję, aby osiągnąć to w prostszy sposób:
/** * 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; }
Osobiście lubię unikać nadmiernej zagnieżdżonej logiki warunkowej, użycie funkcji może w tym pomóc.
Odpowiedź
Masz dwie szybkie opcje, poprzez plik szablonu, używając the_post_thumbnail
dla pętli. Zakładam, że wyprowadzasz dane w typowym formacie blogu i dlatego powyższa funkcja nie będzie działać lub będzie działać bardzo dziwnie wewnątrz pętli.
Zamiast tego spróbuj czegoś takiego w aktualnym pliku szablonu, w którym znajduje się główna pętla (może index.php lub loop.php):
//loop starts if ( has_post_thumbnail() ) { the_post_thumbnail(); } //the_content(); and other stuff //loop ends
Lub jeśli zamiast tego chcesz użyć akcji do zmiany głównej pętli, możesz użyć pre_get_posts
, na przykład w pliku functions.php.
Coś takiego:
add_action( "pre_get_posts", "add_featured_image" ); function add_featured_image( $query ) { if( $query->is_main_query() && $query->is_home() ) { //your image code } }
Zauważ, że powyższe dotyczy sprawdzania 2 parametrów, głównego zapytania i strony głównej, bardzo ważne jest, aby sprawdzić, czy jest to główne zapytanie, w przeciwnym razie zmieni wszystkie zapytania.
Odniesienie: http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Komentarze
- Nie masz ' nie czyta poprawnie pytania, użytkownik nie ' nie chce, aby posty na blogu znajdowały się wewnątrz pętli, chce umieścić wyróżniony obraz strony, który s przypisane do strony indeksu Blogu, co też chcę zrobić.
has_post_thumbnail()
wydaje się działać dobrze na page.php, ale zwracafalse
, gdy jest używany w index.php
Odpowiedź
To działa ..
<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").")"; } ?>;">
Mam nadzieję, że to pomoże!
Odpowiedź
Gdy jesteś na „stronie postów”, $ post rozpocznie się od pierwszego „posta” w pętli. Jednym ze sposobów może być użycie „zapytania o obiekt”.
Wydrukuj $ wp_query, a zobaczysz: [queried_object] [posts] [post] – uwaga: queried_object będzie / może być pusty na niektórych stronach
// 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; }