Після оновлення цифрового товару в WooCommerce базова мовна версія отримала актуальний ZIP-файл, але в перекладах залишилося посилання на попередню версію. Навіть після додавання другого файла ситуація не змінилася: в основному товарі відображалися два файли, а в інших мовах лише один.
Проблему вдалося вирішити без редагування бази даних, видалення перекладів і додаткового PHP-коду. Допомогло перемикання способу редагування перекладених товарів у WPML.
Конфігурація сайту
На сайті використовувалися:
- WordPress;
- WooCommerce;
- WPML Multilingual CMS;
- WPML Multilingual & Multicurrency for WooCommerce версії 5.5.6;
- простий цифровий товар із параметрами
VirtualіDownloadable; - польська як базова мова;
- переклади англійською, німецькою, французькою, українською та іншими мовами.
Для всіх мов мав використовуватися однаковий набір файлів.
Як проявлялася проблема
У базовій польській версії товару було додано актуальний файл:
aroks-elementor-telegram-1.0.4-gxv3r1.zip
Проте в перекладених товарах залишалося посилання на стару версію:
aroks-elementor-telegram-gdpq0t.zip
Спочатку це могло виглядати як кешування старого URL. Але після додавання другого файла до базового товару стало зрозуміло, що проблема стосується всього списку завантажень:
- у польському товарі було два файли;
- у перекладених товарах залишався один;
- назва та URL цього файла відповідали старій версії.
Отже, переклади не отримували актуальну структуру завантажуваних файлів.
Що було видно в редакторі товару
У базовій версії товару можна було:
- змінювати назви файлів;
- вказувати нові URL;
- додавати наступні файли;
- керувати лімітом і строком доступу.
У перекладених версіях відповідні поля були заблоковані. Біля них відображалися іконки замка, а WPML рекомендував працювати з товаром через редактор перекладів.
Саме блокування не є помилкою. Воно означає, що ці параметри повинні успадковуватися від базового товару. Проблема полягала в тому, що фактичні дані не оновлювалися.
Перевірка налаштувань WPML
У розділі:
WooCommerce → WPML Multilingual & Multicurrency → Settings
у блоці Products Download Files була активна опція:
Use the same files for translations
Це правильний режим, коли всі мовні версії товару повинні надавати покупцеві однакові файли.
Варіант:
Add separate download files for translations when translating products
не використовувався.
У самому товарі також була вимкнена опція:
Use custom settings for translations download files
Отже, конфігурація не передбачала окремих файлів для кожної мови.
Що перевірили перед зміною редактора
Оновлення базового товару
Основний товар повторно зберігали після заміни файла. Переклади не отримали новий URL.
Додавання другого файла
До польської версії додали ще один файл. Він також не з’явився в перекладених товарах.
Ця перевірка показала, що проблема не обмежувалася одним застарілим посиланням. WPML не оновлював весь набір завантажень.
Перевірка версії плагіна
На сайті використовувалася версія 5.5.6 WPML Multilingual & Multicurrency for WooCommerce. Причиною не була застаріла версія плагіна.
Повторне збереження налаштувань
Режим однакових файлів для всіх перекладів уже був активний. Повторне збереження параметрів не змінило ситуацію.
Редактор перекладів WPML
Переклади відкривали через редактор WPML, позначений іконкою олівця. Повторне завершення перекладу не оновлювало список файлів.
Рішення
У блоці Translations режим редагування було перемкнено з редактора WPML на стандартний редактор WordPress.
У цьому інтерфейсі:
- іконка олівця відкриває редактор перекладів WPML;
- іконка WordPress відкриває стандартний редактор записів WordPress.
Після перемикання мовні версії товару відкрили у звичайному редакторі та повторно зберегли.
Після цього:
- у перекладах з’явився актуальний файл;
- старе посилання було замінено;
- другий файл також відобразився;
- набір завантажень став однаковим у всіх мовах.
Жодних змін у базі даних або додаткових сніпетів не знадобилося.
Чому зміна редактора могла допомогти
WooCommerce зберігає завантажувані файли не як частину опису товару. Це окремі структуровані метадані, які містять:
- назву файла;
- URL;
- внутрішній ідентифікатор;
- порядок файлів.
Вони пов’язані з метаполем WooCommerce:
_downloadable_files
Редактор WPML насамперед призначений для перекладу мовного вмісту:
- назви товару;
- опису;
- короткого опису;
- атрибутів;
- інших текстових полів.
Службові дані WooCommerce синхронізуються окремими механізмами WPML Multilingual & Multicurrency for WooCommerce.
У цьому випадку повторне завершення перекладу через редактор WPML не оновило метадані завантажень. Після переходу до стандартного редактора WordPress і збереження товару система повторно обробила його службові параметри.
Це технічна інтерпретація отриманого результату. Без аналізу журналів і коду конкретного сайту не можна однозначно визначити, який саме внутрішній процес WPML запустив синхронізацію.
Покрокове рішення
-
Перевірте базову версію товару.
Відкрийте товар основною мовою та переконайтеся, що активна опція
Downloadable, усі файли додані, а їхні назви та URL правильні. Після перевірки натиснітьUpdate. -
Перевірте налаштування файлів у WPML.
Перейдіть до
WooCommerce → WPML Multilingual & Multicurrency → Settings. У секціїProducts Download FilesвиберітьUse the same files for translationsі збережіть налаштування. -
Перевірте індивідуальні параметри товару.
Опція
Use custom settings for translations download filesмає бути вимкнена, якщо для всіх мов використовуються однакові файли. -
Перемкніть редактор перекладів.
У блоці
Translationsвиберіть стандартний редактор WordPress замість редактора WPML. -
Повторно збережіть мовні версії.
Відкрийте кожен перекладений товар і натисніть
Update. Поля файлів можуть залишатися заблокованими, якщо вони керуються базовою версією. -
Перевірте результат.
Звірте кількість файлів, назви, URL, ліміти завантаження, строк дії посилання, ціну та статус публікації.
Перевірка старих замовлень
Оновлення товару не завжди автоматично змінює права на завантаження у вже створених замовленнях.
Це особливо важливо, якщо:
- старий файл було видалено і додано заново;
- до товару додано новий другий файл;
- змінився внутрішній ідентифікатор запису файла.
Покупці, які придбали товар раніше, можуть не отримати автоматичний доступ до нового файла.
Після оновлення варто:
- відкрити старе тестове замовлення;
- перевірити доступні покупцеві завантаження;
- за потреби повторно надати права на файли;
- не видаляти старий файл із сервера до завершення перевірки.
Безпечніше змінювати URL у вже наявному рядку файла, а не створювати новий запис без необхідності.
Коли цього рішення може бути недостатньо
Перемикання редактора може не допомогти, якщо:
- мовні версії товару втратили зв’язок між собою;
- для перекладів налаштовані окремі файли;
- у базі є дублікати товарів;
- метадані певного перекладу пошкоджені;
- синхронізацію змінює сторонній плагін;
- дані повторно перезаписуються після кожного збереження.
У такій ситуації потрібно порівняти значення _downloadable_files у базовому та перекладених товарах.
Перед ручною синхронізацією необхідно створити резервну копію бази даних. Для одного товару безпечніше використати одноразовий PHP-скрипт із конкретними ідентифікаторами товарів, ніж виконувати масову SQL-команду для всієї таблиці postmeta.
Висновок
У цьому кейсі базовий товар містив актуальний набір файлів, але перекладені версії не отримували зміни під час роботи через редактор WPML.
Перехід до стандартного редактора WordPress і повторне збереження мовних версій відновили синхронізацію. Метод дозволив виправити проблему без видалення перекладів, прямої зміни бази даних і додаткового коду.
