Портфоліо живе в темі рівно до того дня, коли тему змінюють, — і тоді разом із нею зникають тип запису, теги й усі кейси. KS Projects забирає архів із теми й повертає його окремим типом вмісту, з відкритим кодом під GPLv3.
Межа, навколо якої його побудовано
Плагіну належать дані та екрани редагування. Темі — те, як усе це виглядає. У цій межі весь задум: редизайн змінює тему, а архів цього не помічає.
Тому плагін везе просту версію кожного з трьох екранів проєкту, а тема перехоплює будь-який із них, просто маючи файл із тим самим іменем. Нічого перемикати чи скасовувати не треба — перевірка та сама, якою WordPress і так знаходить шаблони всюди.
У цих заготовках навмисно немає класів жодного фреймворку. Заготовка, що приїхала зі своїм оформленням, виглядала б недоречно в будь-якій темі, крім тієї, звідки вона походить.
Кейс — це більше, ніж запис
Два метабокси тримають те, що кейсу справді потрібно. Картка — коротке ім’я, підзаголовок і адреса, за якою робота вийшла у світ: заголовок у портфоліо зазвичай ціле речення, а сітці потрібне ім’я.
Титри тримають те, що просив клієнт, хто працював і що зроблено. Написаний руками HTML усередині вмісту запису — а зазвичай цей блок живе саме там — доводиться правити вручну в кожному проєкті за першої ж зміни оформлення. У вигляді полів його розкладає тема, і всі три ключі ввімкнено в ревізії записів, куди мета за умовчанням не потрапляє.
Шаблон під кожен проєкт
Одному кейсу потрібна галерея на всю ширину, іншому — довгий текст. Проєкт може назвати PHP-файл у темі, і цей файл виводиться замість вмісту запису й тільки замість нього: заголовок, теги й титри лишаються за темою. Шаблон — це тіло, а не сторінка: обв’язка не дублюється, і правка рамки доходить до всіх проєктів разом.
Сторінка, яку ви читаєте, — це і є та сама можливість у дії.
Вибір стоїть на екрані редагування та у швидкому редагуванні, а в списку проєктів з’являється колонка — видно з одного погляду, у кого своя верстка. У вміст запису нічого не пишеться й нічого не видаляється: вимкнення шаблона одразу повертає версію з редактора, а зниклий файл відкочується до неї, а не показує порожню сторінку.
Чого навмисно немає в налаштуваннях
Слаги в адресах змінювати можна. Імена типу запису й таксономії — ні, і це якраз цікавіша половина.
Ці імена — ті самі рядки, під якими лежить кожен запис у базі. Винести їх у налаштування означало б дати спосіб втратити архів одним кліком: зміни ім’я на сайті, де вже є проєкти, і всі наявні записи лишаться під типом, який більше ніхто не реєструє. З адмінки вони зникнуть, а їхні адреси перестануть відкриватися. Задати імена, як і раніше, можна у файлі конфігурації сайту — до появи першого проєкту й ніколи після.
Як він влаштований усередині
Класи в просторах імен із сучасним автозавантаженням, і хук оголошено просто на методі, який його обробляє, а не в списку реєстрацій десь осторонь: перейменований метод не залишить реєстрацію, що веде в нікуди. За цим немає ні скомпільованого кешу, ні обходу тек — сервіси перелічені руками в одному файлі, тому є одне очевидне місце, де написано, з чого плагін складається.
API, до якого звертається тема, — це один клас і один імпорт, а не розсип глобальних функцій.
Залежностей у рантаймі немає зовсім, тому репозиторій працює одразу після клонування. Composer потрібен лише для інструментів розробки й ставиться окремо від плагіна — так тестовий клас ніколи не потрапить до автозавантажувача, який іде в постачання.
Що проганяється перед релізом
Статичний аналіз на найсуворішому рівні, який має інструмент, перевірка стандартів коду за правилами WordPress із записаною причиною біля кожного відступу, і модульні тести на те, про що можна міркувати окремо, — правила слагів, набір ключів мети, список вибраного.
Дві перевірки існують тому, що інакше їхня поломка мовчазна: одна не пропускає коміт, де автозавантажувач у постачанні розходиться з вихідниками, друга — переклад, який відредагували, але так і не скомпілювали.
Ролі
Розробник
Konstantin Sorokin
Виконано
- Тип запису, таксономія та два метабокси кейса
- Шаблони за умовчанням, які тема перехоплює за іменем
- Шаблони під конкретний проєкт — вибір на записі або у швидкому редагуванні
- Екран налаштувань із перевіркою слагів і відкладеним скиданням правил перезапису
- Переклади російською та українською
- PHPStan 8-го рівня, стандарти коду WordPress, модульні тести, CI