WordPress по разнообразию настроек и функций всё больше становится похож на операционную систему. В результате выполнение задач в панели администратора оказывается слишком медленным способом работы, что особенно заметно при выполнении рутинных действий.
Любой разработчик и администратор, выходя на определенный уровень профессионализма, стремится такие действия автоматизировать и упростить. В случае операционной системы инструмент, позволяющий это сделать, существует. Это командная строка.
О преимуществах использования командной строки хорошо известно. Существует ли подобный инструмент для управления WordPress? Оказывается, да. Это wp-cli, интерфейс командной строки для WordPress.
Посмотрим, что это такое.
Требования к системе
Нам понадобятся:
- Сайт разработчика wp-cli.
- UNIX-подобная среда (OS X, Linux, FreeBSD, Cygwin).
- PHP не старее версии 5.3.2.
- WordPress не старее версии 3.4.
Установка
С сайта wp-cli скачиваем установочный скрипт и запускаем его:
curl http://wp-cli.org/installer.sh | bash
Всё, что нужно, скрипт сделает сам.
Другие способы установки описаны здесь.
Работа
Чтобы начать работать с WordPress, надо перейти в каталог, где он установлен и иметь возможность подключиться к его базе данных.
После этого командуем
wp
и получаем список команд:
- wp blog empty
- wp cache add|decr|delete|flush|get|incr|replace|set|type
- wp cap add|list|remove
- wp comment approve|count|create|delete|last|spam|status|trash|unapprove|unspam|untrash
- wp core config|download|init-tests|install|install-network|is-installed|update|update-db|version
- wp db cli|create|drop|export|import|optimize|query|repair|reset
- wp eval
- wp eval-file
- wp export
- wp help
- wp media import|regenerate
- wp option add|delete|get|update
- wp plugin activate|deactivate|delete|install|list|path|status|toggle|uninstall|update|update-all
- wp post create|delete|edit|generate|get|list|update
- wp post-meta add|delete|get|update
- wp rewrite dump|flush|structure
- wp role create|delete|exists|list
- wp scaffold _s|child-theme|plugin|plugin-tests|post-type|taxonomy
- wp search-replace
- wp shell
- wp term create|delete|list|update
- wp theme activate|delete|install|list|path|status|update|update-all
- wp transient delete|get|set|type
- wp user add-role|create|delete|generate|import-csv|list|remove-role|set-role|update
- wp user-meta add|delete|get|update
По каждой команде, если нужно получаем справку:
wp help <command>
Но можно начать с нуля и сначала с помощью wp-cli WordPress установить. Скачиваем русский вордпресс последней версии в папку ./wp:
wp core download --locale=ru_RU --path=wp
Будет создан каталог (в нашем случае wp), в который и будет установлен WordPress.
Переходим в каталог wp:
cd wp
Создаём wp-config.php:
wp core config --dbname=wpcli --dbuser=root --dbpass=alkdfhqiu
Success: Generated wp-config.php file.
И, наконец, устанавливаем WordPress:
wp core install --url=wp.home --admin_password=ralrfaier [email protected] --title="Wordpress для тестирования wp-cli"
/sendmail: Cannot open mail:25 Success: WordPress installed successfully.
Ну вот, WordPress установлен. Нетрудно заметить, что wp-cli пытается отправить сообщение об этом на электронный адрес администратора.
Для проверки, установлен ли WordPress, используется команда
wp core is-installed
Ну что, создадим пользователя?
wp user create VI [email protected] --role=author --user_pass=qiwKKkjhKIU --user_registered=2013-06-29 --display_name="Василий Иванович"
Success: Created user 3.
Здесь 3 — это идентификатор созданного пользователя.
Каких мы теперь имеем пользователей?
wp user list
Получаем список в виде таблицы:
+----+------------+---------------------------------+--------------+---------------------+---------------+ | ID | user_login | display_name | user_email | user_registered | roles | +----+------------+---------------------------------+--------------+---------------------+---------------+ | 1 | admin | admin | [email protected] | 2013-06-29 03:50:49 | administrator | | 3 | VI | Василий Иванович | [email protected] | 2013-06-29 00:00:00 | author | +----+------------+---------------------------------+--------------+---------------------+---------------+
Таблица, как видим, получается широкая, придётся терминал настраивать под эту работу.
Есть интересная команда wp user generate, которая позволяет создавать сразу много пользователей. Это может понадобиться при тестировании плагинов.
wp user generate --count=10 --role=subscriber
wp user list
+----+------------+---------------------------------+--------------+---------------------+---------------+ | ID | user_login | display_name | user_email | user_registered | roles | +----+------------+---------------------------------+--------------+---------------------+---------------+ | 1 | admin | admin | [email protected] | 2013-06-29 03:50:49 | administrator | | 12 | user_1_10 | User 10 | | 2013-06-29 08:00:48 | subscriber | | 13 | user_1_11 | User 11 | | 2013-06-29 08:00:48 | subscriber | | 4 | user_1_2 | User 2 | | 2013-06-29 08:00:48 | subscriber | | 5 | user_1_3 | User 3 | | 2013-06-29 08:00:48 | subscriber | | 6 | user_1_4 | User 4 | | 2013-06-29 08:00:48 | subscriber | | 7 | user_1_5 | User 5 | | 2013-06-29 08:00:48 | subscriber | | 8 | user_1_6 | User 6 | | 2013-06-29 08:00:48 | subscriber | | 9 | user_1_7 | User 7 | | 2013-06-29 08:00:48 | subscriber | | 10 | user_1_8 | User 8 | | 2013-06-29 08:00:48 | subscriber | | 11 | user_1_9 | User 9 | | 2013-06-29 08:00:48 | subscriber | | 3 | VI | Василий Иванович | [email protected] | 2013-06-29 00:00:00 | author | +----+------------+---------------------------------+--------------+---------------------+---------------+
Изменим пользователя VI — из-за него таблица кривая:
wp user update 3 --display_name="Vasiliy Ivanovich"
Success: Updated user 3.
Проверим.
wp user list
+----+------------+-------------------+--------------+---------------------+---------------+ | ID | user_login | display_name | user_email | user_registered | roles | +----+------------+-------------------+--------------+---------------------+---------------+ | 1 | admin | admin | [email protected] | 2013-06-29 03:50:49 | administrator | | 12 | user_1_10 | User 10 | | 2013-06-29 08:00:48 | subscriber | | 13 | user_1_11 | User 11 | | 2013-06-29 08:00:48 | subscriber | | 4 | user_1_2 | User 2 | | 2013-06-29 08:00:48 | subscriber | | 5 | user_1_3 | User 3 | | 2013-06-29 08:00:48 | subscriber | | 6 | user_1_4 | User 4 | | 2013-06-29 08:00:48 | subscriber | | 7 | user_1_5 | User 5 | | 2013-06-29 08:00:48 | subscriber | | 8 | user_1_6 | User 6 | | 2013-06-29 08:00:48 | subscriber | | 9 | user_1_7 | User 7 | | 2013-06-29 08:00:48 | subscriber | | 10 | user_1_8 | User 8 | | 2013-06-29 08:00:48 | subscriber | | 11 | user_1_9 | User 9 | | 2013-06-29 08:00:48 | subscriber | | 3 | VI | Vasiliy Ivanovich | [email protected] | 2013-06-29 00:00:00 | author | +----+------------+-------------------+--------------+---------------------+---------------+
Ну вот, теперь нормально. Хотя заявлена полная поддержка utf-8. Нет в жизни идеала… Ну ничего, доработают.
Можем и удалить пользователя
wp user delete 3
Success: Deleted user 3.
Что ещё? Можно создавать, назначать пользователям роли. Естественно, можно работать с записями. Создадим:
wp post create --post_type=post --post_title="Запись №1" --post-status=future --post_date="2013-05-01 07:00:00"
Success: Created post 3.
Как и пользователей, записи можно создавать оптом:
--count=10 --post_author=VI
Получите:
wp post list
+----+-----------------------+---------------------+---------------------+-------------+ | ID | post_title | post_name | post_date | post_status | +----+-----------------------+---------------------+---------------------+-------------+ | 3 | Post title | name | 2013-06-29 12:50:48 | draft | | 7 | Запись 2 | post-2 | 2013-06-29 12:45:40 | publish | | 8 | Запись 3 | post-3 | 2013-06-29 12:45:40 | publish | | 9 | Запись 4 | post-4 | 2013-06-29 12:45:40 | publish | | 10 | Запись 5 | post-5 | 2013-06-29 12:45:40 | publish | | 11 | Запись 6 | post-6 | 2013-06-29 12:45:40 | publish | | 12 | Запись 7 | post-7 | 2013-06-29 12:45:40 | publish | | 13 | Запись 8 | post-8 | 2013-06-29 12:45:40 | publish | | 14 | Запись 9 | post-9 | 2013-06-29 12:45:40 | publish | | 15 | Запись 10 | post-10 | 2013-06-29 12:45:40 | publish | | 16 | Запись 11 | post-11 | 2013-06-29 12:45:40 | publish | PHP Warning: sprintf(): Too few arguments in /home/andyudol/.composer/vendor/wp-cli/php-cli-tools/lib/cli/Streams.php on line 38 +----+-----------------------+---------------------+---------------------+-------------+
Опс! Какая-то ошибка. И где русские буквы, таблица повреждена. Ну ничего, проект молодой, поправят. А какая, кстати, версия-то?
wp --info
PHP binary: /usr/lib64/php5.4/bin/php PHP version: 5.4.13--pl0-gentoo php.ini used: /etc/php/cli-php5.4/php.ini wp-cli root: /home/andyudol/.composer/vendor/wp-cli/wp-cli/php/ wp-cli config: wp-cli version: 0.10.2
0.10.2. Ну да, молодой проект. На github.com они присутствуют примерно 2 года. Не такой-то уж и молодой…
Кстати, это последняя версия. Я как раз только что обновил. Вот так это делается:
cd ~/.composer php composer.phar update
А что у нас с обещанной автоматизацией? Удалим часть записей. Сделаем это вот таким скриптом:
for i in 7 9 11 12 16 do echo $i wp post delete $i done
На экране увидим:
Success: Trashed post 7. Success: Trashed post 9. Success: Trashed post 11. Success: Trashed post 12. Success: Trashed post 16.
Ну что ещё интересного?
Сушествуют команды, позволяющие упростить создание плагинов, тем, таксономий и типов записей.
Для примера создадим заготовку для плагина:
wp scaffold plugin zabor --plugin_name="Надпись на заборе"
Видим:
Success: Created /home/andyudol/wp/wp-content/plugins/zabor Success: Created test files.
Нам сообщают, что создан каталог плагина и файлы теста. На самом деле создан ещё и главный файл плагина.
Пусть теперь нам надо протестировать этот плагин. Командуем
wp core init-tests ~/svn/wp-tests --dbname=wp_db --dbuser=root --dbpass=wpdbpass
Будет загружена и настроена библиотека тестирования WordPress.
Переходим в каталог плагина
cd wp-content/plugins/zabor
и запускаем тест
WP_TESTS_DIR=~/svn/wp-tests phpunit
Что ещё?
Работа с базой данных: создание/удаление, экспорт/импорт и ещё несколько команд.
Поиск и замена в базе данных. Пригодится при переносе базы данных.
Управление ролями и правами доступа пользователей.
Управление кэшированием.
Управление rewrite правилами.
Управление произвольными полями записей и дополнительными полями профиля пользователя.
Есть команды, позволяющие выполнить любой PHP код:
wp eval — из командной строки,
wp eval-file — из файла.
А команда wp shell открывает интерактивную PHP консоль.
Да, и ещё чуть поподробнее об экспорте. Команда wp export позволяет, кроме всего того, что возможно штатными средствами WordPress, во-первых, экспортировать отдельные записи (или несколько, заданных их идентификаторами) и, во-вторых, существует возможность экспорта не в один файл, а в несколько, содержащих заданное количество записей.
wp export --post__in=12,124, 325
wp export --file_item_count=30
Ну вот и всё, каждую команду подробно не готов пока описать, нет достаточного опыта применения. Когда будет, тогда будет и продолжение. Может быть.