Tworzę witrynę dla członków za pomocą WordPress Multisite. Czy można ograniczyć liczbę generowanych obrazów w zależności od wybranego szablonu?
Próbowałem następujących wierszy kodu, aby wygenerować pewne obrazy w szablonie galerii:
// Generate on all uploads
add_theme_support('post-thumbnails');
set_post_thumbnail_size( 1440, 350, true );
add_image_size( 'standard_box', 450, 215, true );
add_image_size( 'default_image', 691, 9999 );
// Generate on gallery template only
if ( is_page_template('page-gallery.php') ) {
add_image_size( 'gallery', 900, 9999 );
add_image_size( 'gallery_thumb', 450, 450, true );
}
To nie zadziałało. Przeprowadziłem badania i nie mogę znaleźć niczego na ten temat. Jeśli mógłbyś wskazać mi właściwy kierunek, bardzo bym to docenił.
Odpowiedzi:
To zawsze było dla mnie problemem - brakiem zmiany rozmiaru obrazu na żądanie i kolejną liczbą plików, z którymi możesz skończyć, jeśli masz dużo rozmiarów!
Widzę logikę twoich wysiłków - problem polega na tym,
add_image_size
że naprawdę wchodzi w grę dopiero w momencie przesłania. Jako takiis_page_template(..)
zawsze będziefalse
.Szybki Google wykopał Aqua Resizer , skrypt zaprojektowany w celu rozwiązania tego problemu. Zamiast używać
add_image_size
, używaszaq_resize
bezpośrednio w swoim motywie, a jeśli rozmiar obrazu nie istnieje, jest on tworzony i buforowany w locie.W rzeczywistości zastosowałem podobną, choć inną, technikę w kilku witrynach o wielu rozmiarach obrazu. Nadal oszczędzasz na generowaniu WordPressa, generując każdy rozmiar dla każdego przesłanego obrazu - są one generowane w locie (i buforowane), kiedy i kiedy są wymagane. Różni się tym, że możesz po prostu korzystać ze wszystkich standardowych funkcji obrazu WP i tagów szablonów, tak jak zwykle!
Ponadto, jak wspomniano @Waqas, użycie Aqua Resizer pozostawi osierocone pliki po usunięciu obrazu z biblioteki multimediów. Dzięki mojej technice wszystkie pliki zostaną usunięte, ponieważ są zapisywane w bazie danych i rozpoznawane przez WordPress.
A w praktyce:
Mam zamiar przekształcić to w wtyczkę, która automatycznie konwertuje wszystkie
add_image_size
połączenia na zmiany rozmiaru na żądanie, więc uważaj na to miejsce!źródło
Zastrzeżenie:
- To nie jest właściwie odpowiedź.
- To jest przeznaczone do pomóc w dalszych badań na ten temat.
- Poza tym to jest odzwierciedleniem - przynajmniej filcu - ostatnio częstszego występowania podobnych pytań dotyczących podobnych problemów.
Dodatkowe informacje dotyczące tego tematu na temat rozwoju Wordpress:
Uwaga: lista nie jest w żaden sposób uporządkowana i wyczerpująca.
źródło
Jeśli chcesz tworzyć kciuki w locie, możesz użyć Aqua Image Resizer , ale ten mini skrypt ma wadę. Utworzone kciuki nie zostaną usunięte po usunięciu obrazu z biblioteki. Ale to nie jest wielka sprawa. W razie potrzeby możesz to zrobić za pomocą poleceń SHH
źródło
To nie jest bezpośrednia odpowiedź na twój problem. Ale pomogę ci stworzyć obraz zgodnie z twoimi potrzebami.
Kiedy używasz add_image_size, nie zmienia on rozmiaru istniejących obrazów. działa tylko w przypadku nowych obrazów, które zostaną przesłane po dodaniu funkcji add_image_size.
Twój kod nie będzie generował nowych obrazów dla funkcji is_page_template.
Ale możesz użyć prostej klasy php, aby rozwiązać swój problem ... jest to słynna klasa php, która jest używana w wielu motywach premium dla WordPress. Nazywa się to Aqua-Resizer.
Więcej informacji można znaleźć tutaj https://github.com/syamilmj/Aqua-Resizer Wiki: https://github.com/syamilmj/Aqua-Resizer/wiki
Problem, który może się pojawić:
Ta funkcja działa w ten sposób ....
Kiedy więc nie można przyciąć (w przypadku małego obrazu określonego przez Ciebie wysokości lub szerokości), nic nie pokazuje. Możesz przezwyciężyć tę sytuację, sprawdzając, czy otrzymujesz wartość zerową po przekazaniu adresu URL w ramach tej funkcji bardzo łatwo, jak tutaj ....
W ten sposób możesz zagwarantować, że określony obraz zostanie wygenerowany dla określonego szablonu strony, dzięki czemu Twoja witryna będzie znacznie czystsza.
PS: ta klasa php wykorzystuje system przycinania rdzenia WordPress, więc nie ma problemów z bezpieczeństwem.
źródło