Po aktualizacji produktu cyfrowego w WooCommerce podstawowa wersja językowa otrzymała aktualny plik ZIP, ale w tłumaczeniach nadal pozostawał odnośnik do poprzedniej wersji. Nawet po dodaniu drugiego pliku sytuacja się nie zmieniła: w produkcie głównym wyświetlały się dwa pliki, a w pozostałych wersjach językowych tylko jeden.
Problem udało się rozwiązać bez edytowania bazy danych, usuwania tłumaczeń ani dodawania kodu PHP. Pomogła zmiana sposobu edycji przetłumaczonych produktów w WPML.
Konfiguracja strony
Na stronie wykorzystywano:
- WordPress;
- WooCommerce;
- WPML Multilingual CMS;
- WPML Multilingual & Multicurrency for WooCommerce w wersji 5.5.6;
- prosty produkt cyfrowy z opcjami
VirtualiDownloadable; - język polski jako język podstawowy;
- tłumaczenia na język angielski, niemiecki, francuski, ukraiński i inne języki.
We wszystkich wersjach językowych miał być wykorzystywany ten sam zestaw plików.
Jak objawiał się problem
W podstawowej polskiej wersji produktu dodano aktualny plik:
aroks-elementor-telegram-1.0.4-gxv3r1.zip
W przetłumaczonych produktach nadal pozostawał jednak odnośnik do starej wersji:
aroks-elementor-telegram-gdpq0t.zip
Początkowo mogło to wyglądać na problem z pamięcią podręczną starego adresu URL. Po dodaniu drugiego pliku do produktu podstawowego stało się jednak jasne, że problem dotyczył całej listy plików do pobrania:
- w polskiej wersji produktu znajdowały się dwa pliki;
- w przetłumaczonych produktach nadal był tylko jeden;
- nazwa i adres URL tego pliku odpowiadały starej wersji.
Oznaczało to, że tłumaczenia nie otrzymywały aktualnej struktury plików do pobrania.
Co było widoczne w edytorze produktu
W podstawowej wersji produktu można było:
- zmieniać nazwy plików;
- wprowadzać nowe adresy URL;
- dodawać kolejne pliki;
- zarządzać limitem pobrań i okresem dostępu.
W przetłumaczonych wersjach odpowiednie pola były zablokowane. Obok nich wyświetlały się ikony kłódki, a WPML zalecał edytowanie produktu za pomocą edytora tłumaczeń.
Samo zablokowanie pól nie jest błędem. Oznacza ono, że te ustawienia powinny być dziedziczone z produktu podstawowego. Problem polegał na tym, że rzeczywiste dane nie były aktualizowane.
Sprawdzenie ustawień WPML
W sekcji:
WooCommerce → WPML Multilingual & Multicurrency → Settings
w bloku Products Download Files aktywna była opcja:
Use the same files for translations
Jest to prawidłowy tryb, gdy wszystkie wersje językowe produktu powinny udostępniać kupującemu te same pliki.
Opcja:
Add separate download files for translations when translating products
nie była używana.
W samym produkcie wyłączona była również opcja:
Use custom settings for translations download files
Konfiguracja nie przewidywała więc osobnych plików dla poszczególnych języków.
Co sprawdzono przed zmianą edytora
Aktualizacja produktu podstawowego
Produkt główny został ponownie zapisany po zmianie pliku. Tłumaczenia nie otrzymały nowego adresu URL.
Dodanie drugiego pliku
Do polskiej wersji dodano kolejny plik. On również nie pojawił się w przetłumaczonych produktach.
Test ten pokazał, że problem nie ograniczał się do jednego nieaktualnego odnośnika. WPML nie aktualizował całego zestawu plików do pobrania.
Sprawdzenie wersji wtyczki
Na stronie była używana wersja 5.5.6 wtyczki WPML Multilingual & Multicurrency for WooCommerce. Przyczyną nie była więc przestarzała wersja wtyczki.
Ponowne zapisanie ustawień
Tryb korzystania z tych samych plików we wszystkich tłumaczeniach był już aktywny. Ponowne zapisanie ustawień nie zmieniło sytuacji.
Edytor tłumaczeń WPML
Tłumaczenia otwierano w edytorze WPML oznaczonym ikoną ołówka. Ponowne ukończenie tłumaczenia nie aktualizowało listy plików.
Rozwiązanie
W bloku Translations sposób edycji został przełączony z edytora WPML na standardowy edytor WordPressa.
W tym interfejsie:
- ikona ołówka otwiera edytor tłumaczeń WPML;
- ikona WordPressa otwiera standardowy edytor wpisów WordPressa.
Po przełączeniu wersje językowe produktu zostały otwarte w zwykłym edytorze i ponownie zapisane.
Po wykonaniu tej operacji:
- w tłumaczeniach pojawił się aktualny plik;
- stary odnośnik został zastąpiony;
- pojawił się również drugi plik;
- zestaw plików do pobrania stał się taki sam we wszystkich wersjach językowych.
Nie było konieczne wprowadzanie zmian w bazie danych ani używanie dodatkowych fragmentów kodu.
Dlaczego zmiana edytora mogła pomóc
WooCommerce nie przechowuje plików do pobrania jako części opisu produktu. Są to osobne, ustrukturyzowane metadane zawierające:
- nazwę pliku;
- adres URL;
- wewnętrzny identyfikator;
- kolejność plików.
Są one powiązane z polem metadanych WooCommerce:
_downloadable_files
Edytor WPML służy przede wszystkim do tłumaczenia treści językowych:
- nazwy produktu;
- opisu;
- krótkiego opisu;
- atrybutów;
- innych pól tekstowych.
Dane techniczne WooCommerce są synchronizowane przez osobne mechanizmy wtyczki WPML Multilingual & Multicurrency for WooCommerce.
W tym przypadku ponowne ukończenie tłumaczenia w edytorze WPML nie zaktualizowało metadanych plików do pobrania. Po przejściu do standardowego edytora WordPressa i zapisaniu produktu system ponownie przetworzył jego ustawienia techniczne.
Jest to techniczna interpretacja uzyskanego rezultatu. Bez analizy dzienników i kodu konkretnej strony nie można jednoznacznie określić, który wewnętrzny proces WPML uruchomił synchronizację.
Rozwiązanie krok po kroku
-
Sprawdź podstawową wersję produktu.
Otwórz produkt w języku podstawowym i upewnij się, że opcja
Downloadablejest aktywna, wszystkie pliki zostały dodane, a ich nazwy i adresy URL są prawidłowe. Następnie kliknijUpdate. -
Sprawdź ustawienia plików w WPML.
Przejdź do
WooCommerce → WPML Multilingual & Multicurrency → Settings. W sekcjiProducts Download FileswybierzUse the same files for translationsi zapisz ustawienia. -
Sprawdź indywidualne ustawienia produktu.
Opcja
Use custom settings for translations download filespowinna być wyłączona, jeśli we wszystkich wersjach językowych mają być używane te same pliki. -
Przełącz edytor tłumaczeń.
W bloku
Translationswybierz standardowy edytor WordPressa zamiast edytora WPML. -
Ponownie zapisz wersje językowe.
Otwórz każdy przetłumaczony produkt i kliknij
Update. Pola plików mogą nadal pozostać zablokowane, jeśli są zarządzane przez wersję podstawową. -
Sprawdź rezultat.
Porównaj liczbę plików, ich nazwy, adresy URL, limity pobrań, okres ważności odnośnika, cenę i status publikacji.
Sprawdzenie starszych zamówień
Aktualizacja produktu nie zawsze automatycznie zmienia uprawnienia do pobierania w już utworzonych zamówieniach.
Jest to szczególnie ważne, jeśli:
- stary plik został usunięty i dodany ponownie;
- do produktu dodano nowy, drugi plik;
- zmienił się wewnętrzny identyfikator wpisu pliku.
Kupujący, którzy nabyli produkt wcześniej, mogą nie otrzymać automatycznie dostępu do nowego pliku.
Po aktualizacji warto:
- otworzyć starsze zamówienie testowe;
- sprawdzić pliki dostępne dla kupującego;
- w razie potrzeby ponownie nadać uprawnienia do pobierania;
- nie usuwać starego pliku z serwera przed zakończeniem testów.
Bezpieczniej jest zmienić adres URL w istniejącym wierszu pliku, niż bez potrzeby tworzyć nowy wpis.
Kiedy to rozwiązanie może nie wystarczyć
Zmiana edytora może nie pomóc, jeśli:
- wersje językowe produktu utraciły wzajemne powiązanie;
- dla tłumaczeń skonfigurowano osobne pliki;
- w bazie danych znajdują się duplikaty produktów;
- metadane konkretnego tłumaczenia są uszkodzone;
- na synchronizację wpływa zewnętrzna wtyczka;
- dane są ponownie nadpisywane po każdym zapisaniu produktu.
W takiej sytuacji należy porównać wartość _downloadable_files w produkcie podstawowym i w jego tłumaczeniach.
Przed ręczną synchronizacją należy utworzyć kopię zapasową bazy danych. W przypadku jednego produktu bezpieczniej jest użyć jednorazowego skryptu PHP z konkretnymi identyfikatorami produktów, niż wykonywać masowe polecenie SQL dla całej tabeli postmeta.
Podsumowanie
W tym przypadku produkt podstawowy zawierał aktualny zestaw plików, ale przetłumaczone wersje nie otrzymywały zmian podczas pracy w edytorze WPML.
Przejście do standardowego edytora WordPressa i ponowne zapisanie wersji językowych przywróciło synchronizację. Metoda pozwoliła rozwiązać problem bez usuwania tłumaczeń, bez bezpośredniej edycji bazy danych i bez dodatkowego kodu.
