
🔧 WP All Import: jak zebrać wszystkie obrazy wpisu w jedną galerię
Zaimportowali Państwo setkę wpisów przez WP All Import, a zdjęcia rozsypały się po treści w dowolny sposób: gdzieś rozciągnięte na całą szerokość, gdzieś przyklejone do tekstu, a gdzieś wiszą jako martwe linki. Przebieranie każdego wpisu ręcznie to stracony wieczór.
Sposób, by zebrać wszystko w jedną galerię, istnieje. I to automatycznie, bez ręcznej edycji treści. Metoda działa zarówno dla świeżych importów, jak i dla wpisów załadowanych miesiąc temu. Poniżej dwa podejścia: lekkie (w locie, przez hook pmxi_gallery_image) i post factum (przez aktualizację grupową). Oba sprawdzone na WP All Import 4.9+.
💡 Szybki przegląd:
- Przygotowujemy CSV lub XML: linki do zdjęć jako pełne adresy URL, po jednym w wierszu
- W szablonie importu konfigurujemy sekcję Images i wskazujemy pole ze zdjęciami
- Dodajemy hook
pmxi_gallery_imagewfunctions.php, galeria składa się sama podczas importu - Dla starych wpisów: funkcja zamiany
<img>na shortcode galerii i aktualizacja grupowa
Jak przygotować zdjęcia do importu
Przed uruchomieniem importu linki do zdjęć muszą być w prawidłowym formacie. WP All Import pobiera zdjęcia tylko wtedy, gdy URL jest pełny, bezpośredni i prowadzi do pliku, a nie do strony HTML.
Załóżmy, że na starej stronie galeria wygląda tak:
1 <a href="/cache/images/photo1.jpg" data-lightbox="group:1" title="Photo 1"> 2 <img src="/cache/images/photo1_thumb.jpg" alt="Photo 1"> 3 </a> 4 <a href="/cache/images/photo2.jpg" data-lightbox="group:1" title="Photo 2"> 5 <img src="/cache/images/photo2_thumb.jpg" alt="Photo 2"> 6 </a>
Po parsowaniu w pliku CSV do importu linki powinny stać się pełnymi adresami URL, po jednym w wierszu, bez otoczki HTML:
1 http://newsite.com/files/photo1.jpg 2 http://newsite.com/files/photo2.jpg
Gdzie http://newsite.com to domena strony, na którą idzie import. Krytyczne: jeśli linki są względne lub prowadzą na starą domenę, WP All Import nie przechwyci plików i nie załaduje ich do biblioteki mediów.
Same linki w treści wpisu muszą pokrywać się jeden do jednego z tymi, które podają Państwo do załadowania przez wtyczkę. W przeciwnym razie po imporcie część tagów <img> zostanie ze starymi adresami URL i nie trafi do galerii.
Konfiguracja szablonu importu w WP All Import
W interfejsie wtyczki przechodzimy do szablonu importu. Główna sekcja tutaj to Images. Wygląda ona tak:

W sekcji Images proszę wskazać pole, które zawiera linki do zdjęć. Zazwyczaj jest to osobna komórka CSV (na przykład gallery_images), gdzie linki są wymienione przez separator, domyślnie |:
1 http://newsite.com/files/photo1.jpg | http://newsite.com/files/photo2.jpg | http://newsite.com/files/photo3.jpg
WP All Import sparsuje ciąg, załaduje każde zdjęcie i doda je do biblioteki mediów WordPress. Ale zdjęcia na razie są po prostu dołączone do wpisu jako załączniki. Galerię złożymy osobno.
Koniecznie proszę sprawdzić, jak wtyczka obsługuje ładowanie. Proszę kliknąć Preview & Test, potem Run Test. Zielony znacznik obok liczby zdjęć oznacza, że wszystko skonfigurowano prawidłowo. Czerwony krzyżyk: proszę sprawdzić adresy URL, muszą być pełne i bezpośrednie.
Przed uruchomieniem importu proszę załadować pliki zdjęć do folderu files w katalogu głównym strony, jeśli wtyczka pobiera zdjęcia z serwera, a nie z zewnętrznych adresów URL.
Jak złożyć galerię w locie: hook pmxi_gallery_image
Najczystszy sposób to złożenie galerii bezpośrednio podczas importu. WP All Import udostępnia hook pmxi_gallery_image, który uruchamia się dla każdego załadowanego zdjęcia. Przechwytują Państwo ID załącznika i zapisują je w metapolu wpisu w wymaganym formacie.
Trzy sprawdzone warianty, proszę wybrać pod swój motyw lub wtyczkę galerii.
Wariant 1: tablica ID załączników. Pasuje do większości motywów, które oczekują galerii w postaci tablicy attachment ID:
1 function my_gallery_ids($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $gallery = get_post_meta($post_id, $key, true); 5 6 if (empty($gallery)) { 7 $gallery = array(); 8 } 9 10 if (!in_array($att_id, $gallery)) { 11 $gallery[] = $att_id; 12 update_post_meta($post_id, $key, $gallery); 13 } 14 } 15 add_action('pmxi_gallery_image', 'my_gallery_ids', 10, 4);
Wariant 2: tablica adresów URL. Jeśli motyw wymaga bezpośrednich linków do zdjęć w pełnym rozmiarze:
1 function my_gallery_urls($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $size = 'full'; 5 $gallery = get_post_meta($post_id, $key, true); 6 7 if (empty($gallery)) { 8 $gallery = array(); 9 } 10 11 if (!isset($gallery[$att_id])) { 12 $src = wp_get_attachment_image_src($att_id, $size); 13 $gallery[$att_id] = $src[0]; 14 update_post_meta($post_id, $key, $gallery); 15 } 16 } 17 add_action('pmxi_gallery_image', 'my_gallery_urls', 10, 4);
Wariant 3: ciąg z separatorem. Jeśli metapole przechowuje ID przez przecinek (format "23,25,31"):
1 function my_gallery_string($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $sep = ','; 5 $gallery = get_post_meta($post_id, $key, true); 6 7 if (is_string($gallery) || empty($gallery) || $gallery == false) { 8 $gallery = explode($sep, $gallery); 9 if (!in_array($att_id, $gallery)) { 10 if ($gallery[0] == '') unset($gallery[0]); 11 $gallery[] = $att_id; 12 update_post_meta($post_id, $key, implode($sep, $gallery)); 13 } 14 } 15 } 16 add_action('pmxi_gallery_image', 'my_gallery_string', 10, 4);
Kod wstawia się do functions.php motywu. Po zakończeniu importu hook można usunąć, metapole jest już wypełnione. Plus metody: galeria jest gotowa od razu po imporcie, bez dodatkowych przebiegów.
Co zrobić z już zaimportowanymi wpisami
Jeśli wpisy są już załadowane, a zdjęcia wiszą w treści jako zwykłe tagi <img>, potrzebne jest inne podejście. Przechodzimy przez wszystkie posty i zamieniamy tagi na shortcode galerii.
Poniższa funkcja zbiera wszystkie ID załączników posta i zamienia <img> w treści na [gallery ids="..."]:
1 function replace_post_images_with_gallery($post_id) 2 { 3 $post = get_post($post_id); 4 if (!$post) return; 5 6 $attachments = get_attached_media('image', $post_id); 7 8 if (empty($attachments)) return; 9 10 $ids = array(); 11 foreach ($attachments as $att) { 12 $ids[] = $att->ID; 13 } 14 15 $gallery_shortcode = '[gallery ids="' . implode(',', $ids) . '"]'; 16 $content = preg_replace('/<img[^>]+>/i', '', $post->post_content); 17 $content = $gallery_shortcode . "\n\n" . $content; 18 19 wp_update_post(array( 20 'ID' => $post_id, 21 'post_content' => $content, 22 )); 23 }
Następnie uruchamiamy aktualizację grupową:
- W panelu administracyjnym przechodzimy do listy wszystkich wpisów.
- W ustawieniach ekranu ustawiamy liczbę elementów na 50 (optymalnie, żeby serwer nie padł).
- Zaznaczamy wszystkie wpisy, w działaniach grupowych wybieramy „Aktualizuj" i stosujemy.
WordPress przejdzie przez każdy wpis, wywoła save_post i powiązane z nim hooki. Jeśli funkcja w functions.php jest podpięta pod save_post, wykona się. Po zakończeniu **proszę usunąć kod z **functions.php, w przeciwnym razie przy każdym zapisie posta treść będzie przebudowywana od nowa.
⁉️🤔 Częste pytania
WP All Import** nie ładuje zdjęć podczas importu, o co chodzi?**
Linki w pliku importu muszą być pełnymi adresami URL (z
http://lubhttps://) i prowadzić bezpośrednio do pliku zdjęcia, nie do strony HTML. Proszę sprawdzić prawa zapisu wwp-content/uploads: jeśli serwer nie może zapisać pliku, import zdjęć jest po cichu pomijany. Najczęstsza przyczyna to niezgodność linków w treści i w polu Images szablonu. Jeśli w treści jesthttp://oldsite.com/img.jpg, a w Images podaje sięhttp://newsite.com/files/img.jpg, wtyczka ich nie powiąże i zdjęcie pozostanie martwe. Adresy URL muszą zgadzać się jeden do jednego.
Dlaczego pmxi_gallery_image jest lepszy niż post-import?
Hook uruchamia się dla każdego zdjęcia w momencie ładowania, gotowa galeria jest od razu po imporcie, bez drugiego przebiegu. Post-import przez
wp_update_postobciąża serwer: tysiąc wpisów daje tysiąc wywołańsave_post. Dla objętości do 100 wpisów różnica jest niezauważalna, ale dla dużych migracji hook oszczędza godziny. Dodatkowopmxi_gallery_imagedaje dostęp do ścieżki załadowanego pliku i attachment ID, można od razu zapisać dowolną logikę: rozdzielić po folderach, dodać do slidera, zsynchronizować z CDN. Post-import nie daje takiej elastyczności.
Czy koniecznie trzeba usuwać kod z functions.php po imporcie?
Tak. Jeśli funkcja wisi na
pmxi_gallery_image, uruchamia się podczas KAŻDEGO dodania załącznika, skutek: duplikaty w metapolu galerii podczas ręcznego ładowania zdjęć. Hook wykonuje się raz, po zakończeniu importu można go bezpiecznie usunąć. Jeśli funkcja jest podpięta podsave_postlub używana w aktualizacji grupowej, tym bardziej proszę usunąć. W przeciwnym razie każda edycja wpisu będzie przebudowywać treść, usuwając tagi<img>i nadpisując galerię.
Jak zostawić pojedyncze zdjęcia poza galerią?
Proszę wykluczyć je z zamiany. W wariancie z
pmxi_gallery_imageproszę dodać warunek według rozmiaru lub tekstu alt. W wariancie z post-importem zamiastpreg_replacena wszystkie<img>proszę użyć zamiany selektywnej: zostawić zdjęcia z określoną klasą CSS lub atrybutem, resztę usunąć i zastąpić galerią. Na przykład<img class="keep">zostaje w treści, wszystkie pozostałe<img>są zamieniane na[gallery]. Rozwiązuje się to przez dopracowanie wyrażenia regularnego w funkcji zamiany.
WP All Import** Pro czy wystarczy wersja darmowa?**
Darmowa wersja potrafi importować zdjęcia do biblioteki mediów i dołączać je do wpisu. Hook
pmxi_gallery_imagejest w niej również dostępny. Wersja Pro dodaje: ładowanie zdjęć z zewnętrznych adresów URL, importy Cron według harmonogramu, wykonywanie funkcji PHP bezpośrednio w szablonie importu oraz obsługę pól niestandardowych. Do jednorazowego importu z plikami lokalnymi darmowa wersja wystarcza z dużym zapasem. Pro jest potrzebna, gdy zdjęcia leżą na zewnętrznym serwerze i nie chcą Państwo ładować ich ręcznie, a także do pól ACF, importu WooCommerce i pracy z niestandardowymi typami wpisów.
Którą metodę wybrać do swojego zadania
Jeśli dopiero planują Państwo import, proszę składać galerię w locie przez pmxi_gallery_image. Szybciej, czyściej i bez podwójnego obciążenia serwera. Każdy z trzech powyższych wariantów działa: wybór zależy od tego, w jakim formacie Państwa motyw lub wtyczka oczekują galerii.
Jeśli wpisy są już załadowane, a zdjęcia rozsypane po treści, proszę wziąć funkcję zamiany <img> na [gallery] i uruchomić aktualizację grupową. Dla niewielkich objętości (do 200 wpisów) zajmie to parę minut. Dla tysięcy wpisów rozsądniej jest podzielić na partie po 50.
Sam WP All Import to jeden z najelastyczniejszych importerów dla WordPressa. 200 000+ aktywnych instalacji, darmowa wersja na WordPress.org pokrywa większość zadań migracyjnych. A wersja Pro zdejmuje ostatnie ograniczenia dotyczące zewnętrznych adresów URL i importów Cron. Proszę spróbować.



