Мне понадобилась массовая генерация разделов для таксономии в 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 (звезду поставь, зря старался что-ли)
Всю статью написал ГПТ
Мы в эпохе мёртвого интернета, смиритесь