Мне понадобилась массовая генерация разделов для таксономии в WP.
По базе WP-CLI предлагает только команду wp term create, которая генерирует только один термин за вызов.
Старт: wp-seeders.php
Плагин начинается с простого файла wp-seeders.php, который регистрирует автозагрузку классов и подключает нужные зависимости. Ничего лишнего: подключил, загрузил, поехали.
Структура проекта
Внутри всё разложено вот так:
├── includes │ ├── Abstracts │ │ └── AbstractCLIController.php │ ├── Bootstrap │ │ ├── CLI.php │ │ └── Commands.php │ ├── Controllers │ │ ├── CLIController.php │ │ ├── SettingsController.php │ │ └── TermsController.php │ └── Load.php ├── templates │ └── seeders.php ├── bin, tests, vendor — по базе ├── composer.json └── и прочая шелуха
В директории includes/Controllers живут контроллеры, которые отвечают за отдельные куски логики. TermsController, например, занимается созданием терминов. SettingsController — настройками (вдруг потом захочется что-то тонко регулировать). CLIController читает файл сидера и создаёт термины.
Есть базовый AbstractCLIController, чтобы не копипастить общие методы.
В includes/Bootstrap находятся файлы, которые подключают команды к WP-CLI (Commands.php) и настраивают сам CLI (CLI.php). Всё по минимуму, без усложнений.
Как это работает
Допустим, у заказчика есть список терминов для таксономий в количестве 100 и более штук.
Инициализируем файл сидера:
wp seeders init
Создастся seeder.php в wp-content/wp-seeders:
<?php namespace WPSeeders; class Seeder { /** * The list of terms to be created. * * @var array */ static public function init() { return [ 'terms' => [ [ 'taxonomy' => 'category', 'term_list' => [ // сюда термины ], 'parent' => 0, ] ] ]; } }
Запуск сидерной аннигиляторной пушки 3000:
wp seeders run
Ну и впринципе всё.
Пока другого не придумал чё такого бы влепить. Может это можно развить во что-то большее.
Итог
Собрал плагин меньше чем за день, когда появилась подобная задача. Может в WP уже есть такие решения и я сделал велосипед щас, но я только в гитхабе находил парочку похожих, но неподдерживаемых проектов.
Плагин тут: github.com/aigen31/wp-seeders (звезду поставь, зря старался что-ли)
Всю статью написал ГПТ
Мы в эпохе мёртвого интернета, смиритесь
