WordPress

php — Jak wyświetlić obrazy (z podglądem miniatur) w wynikach wyszukiwania?

  • 8 kwietnia, 2018
  • 3 min read
php — Jak wyświetlić obrazy (z podglądem miniatur) w wynikach wyszukiwania?


Jest to coś, czym należy się zająć w szablonie wyników wyszukiwania Twojego motywu. Jeśli motyw jest niedostępny, prawdopodobnie nie będzie obsługiwał miniatur załączników, ponieważ – jak zauważyłeś – załączniki zwykle nie pojawiają się w wynikach wyszukiwania.

Dzieje się tak, ponieważ w normalnym motywie każdy wynik będzie korzystał z rozszerzenia the_post_thumbnail() funkcja wyświetlania miniatury. Pod maską sam przedstawiony obraz jest postem typu załącznik. Ta funkcja pobiera identyfikator wyróżnionego obrazu w poście i używa tego identyfikatora wp_get_attachment_image()który wyświetla obraz/miniaturę załącznika.

Ponieważ posty w załącznikach tego nie robią Posiadać wyróżniony obraz, ponieważ same w sobie są już załącznikami, ta funkcja nie wyświetli niczego.

Dlatego, aby wyświetlić obraz załącznika, szablon musiałby sprawdzić, czy post jest załącznikiem, a jeśli tak, pominąć the_post_thumbnail() i przejdź bezpośrednio do wp_get_attachment_image() z własnym identyfikatorem postu. Z tego przykładu widać, że szablon załącznika wyświetla obraz w ten sposób.

W praktyce wyglądałoby to mniej więcej tak:

if ( get_post_type() === 'attachment' ) {
    echo wp_get_attachment_image( get_the_ID(), 'large' );
} else {
    the_post_thumbnail( 'large' );
}

Dokładny rozmiar obrazu, który ma zostać użyty zamiast 'large' zależy od tego, czego już używa Twój motyw.

Warto przeczytać!  import - zawartość mieszana: strona pod adresem „” została załadowana przez HTTPS, ale zażądano niezabezpieczonej czcionki „”

Wymagałoby to modyfikacji plików motywu, a dokładny plik zależy od oryginalnego motywu. Będziesz musiał sprawdzić pliki motywu względem hierarchii szablonów, aby zobaczyć, które pliki są faktycznie używane. Niezależnie od tego, który to plik, powinieneś wprowadzić zmiany, tworząc motyw potomny. Dzięki temu zmiana będzie zabezpieczona przed aktualizacjami motywu, które zwykle usuwają wszelkie zmiany.

Inną metodą, która nie będzie wymagała modyfikowania szablonów (ale nadal będzie wymagać utworzenia motywu podrzędnego lub niestandardowej wtyczki do umieszczenia kodu), byłoby odfiltrowanie żądania dotyczącego identyfikatora miniatury postu.

Głęboko the_post_thumbnail() wykorzystuje get_post_meta( $post->ID, '_thumbnail_id', true ); aby uzyskać identyfikator załącznika, który jest obrazem wyróżnionym w poście. Możesz to przefiltrować, aby jeśli WordPress żąda tej metawartości dla postu, a post jest załącznikiem, zamiast tego zwróć identyfikator załącznika.

Można to zrobić za pomocą get_post_metadata filtr:

function wpse_300128_attachment_post_thumbnail( $value, $post_id, $meta_key, $single ) {
    if ( get_post_type( $post_id ) === 'attachment' && $meta_key === '_thumbnail_id' ) {
        return $single ? $post_id : array( $post_id );
    }
}
add_filter( 'get_post_metadata', 'wpse_300128_attachment_post_thumbnail', 10, 4 );

Gdy ten filtr jest aktywny, za każdym razem, gdy WordPress będzie próbował uzyskać identyfikator miniatury postu w załączniku, zamiast tego otrzyma identyfikator. Wartość zwracana to albo sam identyfikator, albo tablica zawierająca identyfikator na podstawie wartości $single. Dzieje się tak, aby wynik miał oczekiwany format niezależnie od tego, czy oryginalne wywołanie miało $single ustawić na true lub false.

Warto przeczytać!  Jak dodać paginację do pętli postów w niestandardowej karcie BuddyPress


Źródło