У мене з’явився новий улюблений плагін, пов’язаний із розробкою WP – Theme YAML. Сашко Паукнер (Sascha Paukner) випустив його кілька днів тому. Цей плагін порадує багатьох розробників тим, адже він дозволяє створювати JSON для тем у форматі YAML.
Авторам тим потрібно буде просто створити новий файл theme.yaml і додати в нього свою конфігурацію в легкочитаному форматі YAML. Плагін перетворює його на JSON і збереже в theme.json.
Виглядає все це приблизно так:

Чудово!
JSON – не найпростіший для написання формат при роботі з файлами конфігурації (такими як, власне, theme.json). Він чудово підходить для зберігання даних різними мовами, проте змінювати або коригувати в ньому щось практично нереально. Зазвичай він містить сотні чи тисячі рядків. Також у ньому не можна залишати вбудовані коментарі, щоб нагадати собі чи іншим, чому було ухвалено те чи інше рішення.
YAML краще? У нього є свої плюси, і свої мінуси. Як показує моя практика, синтаксис може відлякати деяких новачків. Однак підтримка вбудованих коментарів – його суттєвий плюс.
Документація плагіна залишає багато запитань. У ній нічого не сказано, як це все працює. Чи є параметри конвертації? Чи все це відбувається автоматично? Чи відбувається конвертація під час кожного завантаження сторінки?
Я вирішив подивитися у код, щоб зрозуміти, як працює плагін. У результаті я з’ясував наступне: плагін автоматично шукає файл theme.yaml у кореневій папці активної теми під час завантаження сторінки. Якщо файл знайдено, тоді проводиться перевірка часу його останньої зміни і це значення зберігається в базі даних. Коли є нові модифікації файлу, плагін парсить theme.yaml, конвертує його в JSON і записує результат у theme.json.
Якщо тема є дочірньою, процес піде автоматично для батьківської теми.
Мінус плагіна – він залишає JSON мінімізованим, що ускладнює його читання. Це нормально, якщо у вас файл theme.yaml під рукою. Однак при надсиланні тем до каталогу WordPress.org такі файли не повинні бути в ZIP-архіві.
Я вважаю, що код повинен бути легкочитаним і редагованим для всіх, хто отримує копію теми. Автори тим можуть піти кількома шляхами. Можна надіслати одночасно обидва файли theme.json і theme.yaml або змінити наступний код у файлі плагіна:
$themeJson = json_encode($themeObject, JSON_UNESCAPED_SLASHES);
Нам потрібно включити прапорець JSON_PRETTY_PRINT для функції json_encode():
$themeJson = json_encode($themeObject, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
Сподіваюся, що розробник плагіна внесе відповідні зміни до наступного випуску.
Існують інші підходи для авторів тем, що уникають редагування theme.json. Раніше я розбивав свій JSON за кількома файлами, щоб отримати зручні та зрозумілі фрагменти. Потім я застосовував плагін webpack для їх злиття під час збирання.
Я рекомендую використовувати JS YAML Parser або аналогічний пакет для тих, хто воліє працювати з YAML у своїй системі збирання.