Командная строка WordPress

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 --admin_email=xxx@yyy.zz --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 moio@milo.ru --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                           | xxx@yyy.zz   | 2013-06-29 03:50:49 | administrator |
| 3  | VI         | Василий Иванович | moio@milo.ru | 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                           | xxx@yyy.zz   | 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         | Василий Иванович | moio@milo.ru | 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             | xxx@yyy.zz   | 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 | moio@milo.ru | 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

 

 


Ну вот и всё, каждую команду подробно не готов пока описать, нет достаточного опыта применения. Когда будет, тогда будет и продолжение. Может быть.