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:

  1. 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.
  2. Jeśli chcesz tylko pełnowymiarowego obrazu, użyj wp_get_attachment_url() zamiast wp_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 zwraca false, 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; } 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *