ГлавнаяРазноеWordPress в командной строке с помощью WP-CLI

WordPress в командной строке с помощью WP-CLI

WP-CLI это утилита для работы с сайтами на WordPress в командной строке. С помощью нее вы можете устанавливать темы и плагины, обновлять их, активировать, деактивировать, обновлять ядро WordPress, управлять комментариями и многое другое.

Работа с WordPress с помощью командной строки WP-CLI

Работа с WordPress с помощью командной строки

В разработке проекта WP-CLI приняли участие почти 100 разработчиков, многие из которых так же участвуют в разработке ядра WordPress. С утилитой приятно работать как при локальной разработке проектов на WordPress, так и при администрировании живых сайтов. Некоторые хостинг-компании начали включать пакет WP-CLI для клиентов shared и VPS хостинга.

Установка WP-CLI

Перед тем как приступить к установке пакета WP-CLI убедитесь в том, что он еще не установлен в вашем окружении. Это можно сделать при помощи wp в командной строке операционной системы:

$ wp --version
WP-CLI 0.14.1

Если система не выдала ошибку о не найденной команде, а показала версию пакета WP-CLI, то данный раздел можно пропустить.

Учтите, что для работы WP-CLI вам потребуется PHP версии 5.3.2 или выше. Если на вашей системе не установлен интерпретатор PHP, советуем обратиться к документации по установке PHP.

Установка WP-CLI на Linux и OS X

Если вы работаете с OS X, любым дистрибутивом Linux или FreeBSD, для установки WP-CLI вам достаточно скачать пакет wp-cli.phar. Сделать это можно с помощью утилиты curl или wget:

$ curl -L https://raw.github.com/wp-cli/builds/gh-pages/phar/wp-cli.phar > wp-cli.phar

Данная команда загрузит файл wp-cli.phar. Проверить совместимость системы с данным пакетом можно запустив его с параметром --info:

$ php wp-cli.phar --info
PHP binary:	/usr/bin/php
PHP version:	5.4.24
php.ini used:
WP-CLI root dir:	phar://wp-cli.phar
WP-CLI global config:
WP-CLI project config:
WP-CLI version:	0.14.1

Если система совместима, то вы можете смело копировать файл wp-cli.phar в любую директорию, которая находится в системной переменной $PATH. Это делается для того, чтобы WP-CLI можно было вызвать из любой директории. Сам файл wp-cli.phar необходимо так же пометить как исполняемый:

$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/bin/wp

После этого вы сможете запустить wp --version из любой директории.

Установка WP-CLI на Windows

Если вы используете операционную систему Windows для разработки, вам потребуется сперва установить Cygwin — коллекция Linux утилит для Windows. Так же следует убедиться в том что интерпретатор PHP доступен из командной строки. Для этого возможно вам будет необходимо внести соответствующие изменения в переменную PATH.

Скачайте файл wp-cli.phar (прямая ссылка) переименуйте его в wp.bat и разместите в любой директории, которая указана в системной переменной PATH, например та же директория где установлен интерпретатор php.exe.

После этого вы сможете вызывать wp из командной строки в любой директории.

Основные команды WP-CLI

Перед тем как выполнять команды WP-CLI вы должны находиться в директории с установленной и сконфигурированной копией WordPress. Данные для подключения к базе данных MySQL WP-CLI берет именно из вашего файла wp-config.php.

Узнать текущую версию ядра WordPress:

$ wp core version --extra
WordPress version: 3.9-RC1-src
Database revision: 27916
TinyMCE version:   4.021 (4021-20140407)

Обновить ядро WordPress до последней версии:

$ wp core update
Downloading update from https://wordpress.org/latest.zip...
Unpacking the update...
Success: WordPress updated successfully.

Получить список установленных плагинов:

$ wp plugin list
+--------------------------+----------------+-----------+---------+
| name                     | status         | update    | version |
+--------------------------+----------------+-----------+---------+
| bbpress                  | active         | none      | 2.5.3   |
| core-control             | inactive       | none      | 1.1     |
| debug-bar                | active-network | none      | 0.8.1   |
| debug-bar-console        | active-network | none      | 0.3     |
+--------------------------+----------------+-----------+---------+

Установить плагин из директории WordPress.org:

$ wp plugin install tinymce-advanced
Installing TinyMCE Advanced (3.5.9.1)
Downloading install package from https://downloads.wordpress.org/plugin/tinymce-advanced.3.5.9.1.zip...
Unpacking the package...
Installing the plugin...
Plugin installed successfully.

Активировать или деактивировать плагин:

$ wp plugin activate tinymce-advanced
Success: Plugin 'tinymce-advanced' activated.
$ wp plugin deactivate bbpress
Success: Plugin 'bbpress' deactivated.

Обновить плагин:

$ wp plugin update bbpress
Success: Updated 1/1 plugins.

Активировать тему:

$ wp theme activate twentytwelve
Success: Switched to 'Twenty Twelve' theme.

Пометить комментарий как спам или удалить его:

$ wp comment spam 26
Success: Marked as spam comment 26.
$ wp comment delete 6
Success: Deleted comment 6.

Открыть запись в текстовом редакторе:

$ wp post edit 3821

Загрузить изображение в медиатеку и прикрепить его к записи:

$ wp media import image.png  --post_id=7956
Success: Imported file image.png as attachment ID 8671 and attached to post 7956.

Получить или изменить опцию из таблицы wp_options:

$ wp option get blogdescription
Yet Another WordPress Site
$ wp option update blogname "Company Name"
Success: Updated 'blogname' option.

Дополнительные возможности WP-CLI

Ниже представлены некоторые дополнительные команды утилиты WP-CLI, которыми вы наверняка когда-нибудь воспользуетесь, если занимаетесь разработкой тем или плагинов для WordPress.

Выполнить запрос в базу данных WordPress:

$ wp db query "SELECT COUNT(*) FROM wp_posts;"
+----------+
| COUNT(*) |
+----------+
|     1449 |
+----------+

Полный экспорт и импорт базы данных WordPress:

$ wp db export wordpress.sql
Success: Exported to wordpress.sql
$ wp db import wordpress.sql
Success: Imported from wordpress.sql

Сгенерировать десять записей:

$ wp post generate --count=10 --post_type=post
Generating posts  100%[=======================================] 0:01 / 0:01

Сгенерировать десять записей с контентом от сервиса loripsum.net:

$ curl http://loripsum.net/api/5 | wp post generate --post_content --count=10
Generating posts  100%[=======================================] 0:01 / 0:01

Интерактивная консоль WP-CLI

Одна из самых мощных возможностей утилиты WP-CLI это интерактивная консоль WordPress. Если вы когда-либо работали с языком программирования Python, то вам известно, что интерактивная консоль — незаменимая вещь при отладке кода.

$ wp shell
wp> $p = get_post( 32065 );
wp> $p->post_title;
string(45) "WordPress в командной строке с помощью WP-CLI"

В интерактивной консоли доступны все функции и классы окружения WordPress, но учтите что при возникновении фатальной ошибки интерактивная консоль вам о ней не сообщит. Вам нужно будет вручную просмотреть журнал ошибок PHP.

Заключение

WP-CLI является мощным инструментом, который мы рекомендуем всем разработчикам проектов на WordPress. В WP-CLI есть масса других возможностей, о которых мы не упомянули в этой статье. Для получения полного списка доступных команд, выполните wp --help или посетите официальный сайт проекта.

Стоит так же отметить, что плагины WordPress могут регистрировать свои собственные дополнительные команды для WP-CLI. Этой возможностью уже воспользовались некоторые популярные плагины, например Jetpack.

Подписаться на рассылку

Подписаться → Подпишитесь на бесплатную рассылку журнала WP Magazine и получайте новости, события, подборки тем и плагинов, уроки, советы и многое другое в мире WordPress!

  • vovasik

    Даже под винду вышло :0

    • Да, правда придется все же немного помучаться с настройкой, особенно если работаете с каким-нибудь XAMPP, где в PATH одна версия PHP, а в настройках Apache другая :)

  • Evgeny

    Большое спасибо за полезную статью, Константин! Раньше обновлял ядро/темы/плагины через SSH SFTP Updater Support, теперь, наверное, будет проще :)

    Вы не могли бы так же подсказать, насколько безопасно выставлять права 777 на wp-content? И может быть существует еще какой-то оптимальный способ обновления без использования FTP?

    • Права 777 безопасно ставить только на директорию wp-content/uploads, при этом советуем также запретить любое исполнение PHP скриптов в директории wp-content. Все плагины и темы должны подгружаться извне этой директории.

      Помимо FTP WordPress умеет обновляться (а также обновлять и устанавливать темы и плагины) через SSH или используя прямой доступ без запроса пароля. Прямой доступ самый оптимальный, и для этого необходимы правильные настройки прав на файлы и директории ядра WordPress. PHP должен запускаться от имени владельца .php файлов, другие пользователи в системе не должны иметь возможности чтения и записи в эти файлы.

      Эта тема совсем недавно подробно обсуждалась здесь в комментариях.

      • Evgeny

        Вот как раз настройка прав при прямом обновлении меня пугала)
        Еще раз большое спасибо, буду изучать.

  • Не пробовали, но выглядит интересно. Вообще в описании написано, что наличие WP-CLI на удаленном сервере не обязательно, но скрипт скачает wp-cli.phar при его отсутствии. Так что в конечном итоге на сервере будет выполняться та же самая программа.

  • Ivan Panfilov

    Самое главное упустили — как устанавливать через wp-cli вордпресс? от и до, посмотрел куча команд — не понял что в каком порядке запускать.

    • Скачиваем файлы — wp core download.
      Устанавливаем (создаются таблицы в БД) — wp core install.

      • Ivan Panfilov

        Error: wp-config.php not found.
        Either create one manually or use `wp core config`.

        а потом еще русский язык надо устанавливать или сразу можно указать?

  • Дмитрий Дзюба

    Добрый день, я пользуюсь Windows7, XAMPP, в Path прописан путь к php, скачал wp-cli.phar в папку с php.exe, переименовал в wp.bat, установил Cygwin, в терминале php команды работают. На wp —version пишет команда не найдена. Далее перехожу в директорию с вордпрессом cd c:/xampp/htdocs/plugin, потом wp core version —extra — тот же ответ — команда не найдена. Подскажите пожалуйста где я ошибся.