Примеры использования WP-CLI
Сборка различных полезных примеров при работе с WP-CLI. Тут собраны не просто команды (примеры отдельных команд смотрите в описании команды), а комбинации команд или работа команд в связке с чем-либо еще. Ниже примеры из практики.
Установка WordPress
Перед установкой нужно создать Базу данных.
-
Скачиваем WordPress в папку с проектом (указываем нужную локализацию):
wp core download --locale=ru_RU
-
Создаем файл
wp-config.php
и прописываем данные для соединения с БД:wp config create --dbname=my_db --dbuser=root --dbpass=jo76hazq
-
Создаем Базу данных. Подробнее, как создать базу данных.
wp db create
-
Устанавливаем WordPress
wp core install --url=example.com --title=Example --admin_user=supervisor --admin_email=info@example.com --admin_password=strongpassword
Или можно так (в этом случае все параметры вы будите вводить в консоли поочереди):
wp core install --prompt
Создание Базы данных
Способ 1 (когда у пользователя БД есть права на создание баз данных):
Создаём базу данных, если она не создана и есть права на создание БД. Права должны быть у пользователя указанного в wp-config.php
.
wp db create
Способ 2 (когда у пользователя нет прав на создание БД):
Это можно сделать через phpMyAdmin или другой GUI. Также это можно сделать через консоль. Подробнее, как работать с базой из консоли тут.
Базу данных можно создать через WP CLI, командой wp db create, если есть соответствующие права. Об этом рассказано в секции ниже, а этот блок информации является альтернативой.
Подключаемся к серверу баз данных под рутом или другим юзером, у которого достаточно прав для создания БД:
mysql -u root -p jo76hazq
Если пароль состоит из разнообразных символов, то консоль выдаст ошибку. В таких случаях лучше сделать так:
# 1 ввод mysql -u root -p # 2 ввод (консоль попросит ввести пароль) J0(kFB4)~W+NN2}jM7aea;d>aT.hT^W2k;28ZQP27M36Hq6MwX
Создаем базу данных:
mysql> CREATE DATABASE `my_db` CHARACTER SET utf8 COLLATE utf8_general_ci;
Установка WordPress через кастомную bash функцию
Если вам часто нужно устанавливать разные DG проекты, то будет удобно иметь функцию, которая будет разом запускать все необходимые команды.
Создадим следующую функцию в файле ~/.bashrc
(linux).
wp_install() { wp core download --path=$1; cd $1; read -p 'database name:' dbname; wp config create --dbname=$dbname --dbuser=root --dbpass=root --dbhost=localhost; wp db create; wp core install --prompt }
Заметка: замените учетные данные базы данных на свои.
Заметка: указанный пользователь БД должен иметь права на создание баз данных.
Теперь, перезагрузите оболочку командной строки (или откройте новую консоль).
Когда вам потребуется создать новый сайт на WordPress, вызовите функцию wp_install и укажите название каталога, в котором будет создан сайт:
$ wp_install new-site
Несколько команд CLI из файла
Смотрите в описании wp eval file
Копирование БД основного сайта в тестовый (мультисайт)
Задача: нужно скопировать БД из сайта aaa.com в сайт bbb.com. Нужно учесть что это мультисайт.
cd ~/aaa.com/public_html/ wp db export all-db-dump.sql cd ~/bbb.ru/public_html/ wp db import ~/bbb.com/public_html/all-db-dump.sql rm ~/aaa.com/public_html/all-db-dump.sql wp search-replace aaa.com bbb.ru --all-tables --network --report-changed-only
Запуск WP-CLI команды для каждого сайта сети
Как выполнить одну команду на всех сайтах сети мультисайт?
Для выполнение WP-CLI команды на конкретном под-сайте сети WordPress multisite
WP-CLI использует глобальный параметр --url=<url>
для указания контекста запроса. Запустить команду на сразу всех под-сайтах можно, комбинируя wp site list
и xargs
.
За кулисами, --url=<url>
устанавливает переменные $_SERVER['HTTP_HOST']
, $_SERVER['REQUEST_URI']
и связанные с ними переменные контекста запроса. Затем WordPress интерпретирует эти переменные, чтобы понять, какой сайт загружать в многосайтовой сети.
Вот пример, в котором команда wp option get home выполняется на всех сайтах:
wp site list --field=url | xargs -I % wp option get home --url=%
Деконструкция этого примера:
-
wp site list --field=url
выдает список URL для всех сайтов в сети. Вы можете настроить список URL путем фильтрации на основе поддерживаемых аргументов. -
Оператор
|
передает результаты изwp site list
вxargs
, утилиту, которая принимает строки ввода и передает их некоторой команде. xargs -I % wp option get home --url=%
запускаетwp option get home
для заданного сайта, идентифицированного с помощью--url=<url>
. Знак%
- это заполнитель, который заменяется на URL из списка сайтов.
Удаление заголовка CSV
По умолчанию --format=csv
включает в себя строку заголовка:
$ wp user list --format=csv ID,user_login,display_name,user_email,user_registered,roles 1,daniel,daniel,daniel@handbuilt.co,"2022-12-21 23:05:16",administrator
Если вы хотите удалить строку заголовка, вам поможет tail:
$ wp user list --format=csv | tail -n +2 1,daniel,daniel,daniel@handbuilt.co,"2022-12-21 23:05:16",administrator
Перечислить все URL картинок во всех постах
wp post list --field=ID | \ xargs -I % wp post get % --field=post_content | \ sed -ne 's;.*\(https\?\S\+\(jpe\?g\|png\|gif\)\).*;\1;gp'
Пояснение:
- Перечислить все идентификаторы постов.
- Получить содержимое каждого поста (xargs).
- Отображать только URL-адреса изображений (sed).
Создание страницы WP из html файла
wp post create new_page.html --post_type=page --post_title="New Page" --porcelain | \ xargs -I % wp post meta add % imported_from new_page.html
Пояснение:
-
Создает страницу (-porcelain вернет только идентификатор нового поста).
- Создает post meta с помощью xargs, используя "-I %" для обозначения шаблона-заполнителя для нового идентификатора поста.
Просмотр списка изменений плагина
Требуется elinks
для просмотра HTML.
wget -qO- https://api.wordpress.org/plugins/info/1.0/akismet | \ php -r '$seri=unserialize(stream_get_contents(STDIN)); echo $seri->sections["changelog"];' | \ elinks -force-html
Пояснение:
-
С помощью
wget --quiet
мы спрашиваем у WordPress.org Plugin API данные плагина. -
unserialize все данные с помощью php и вывод changelog часть из данных ответа API.
- Запускаем elinks (консольный браузер) для просмотра журнала изменений.
Запуск WP-CLI с ABSPATH текущей папки и под владельцем текущей папки
#!/bin/bash sudo -u $(stat . -c %U) -- wp --path="$PWD" "$@"
Пояснение:
Команда stat возвращает владельца текущего каталога, WordPress root.
Сортировка плагинов или тем по столбцам
В командах wp plugin list
или wp theme list
нет опции по какой колонке сортировать результат.
Однако, чтобы отсортировать результат мы можешь вывести его в формате --format=csv
и затем прокинуть (pipe) в CLI пакет который умеет сортировать.
Например, если вы хотите отсортировать по status и затем по name. То можно использовать пакет miller - mlr:
$ wp plugin list –format=csv | mlr –icsv –opprint sort -f status,name
Переход в директорию сайта на WordPress из меню
#!/bin/bash WP_TOP_PATH="/home/" MENU_TEXT="Choose an installation" GAUGE_TEXT="Searching for WordPress" declare -a MENU WPS="$(wp --allow-root find "$WP_TOP_PATH" --field=version_path)" WP_TOTAL="$(wc -l <<< "$WPS")" WP_COUNT="0" while read -r WP; do WP_LOCAL="${WP%wp-includes/version.php}" NAME="$(cd "$WP_LOCAL"; sudo -u "$(stat . -c %U)" -- wp --no-debug --quiet option get blogname)" if [ -z "$NAME" ]; then NAME="(unknown)" fi MENU+=( "$WP_LOCAL" "$NAME" ) echo "$((++WP_COUNT * 100 / WP_TOTAL))". done <<< "$WPS" > >(whiptail --gauge "$GAUGE_TEXT" 7 74 0) WP_LOCAL="$(whiptail --title "WordPress" --menu "$MENU_TEXT" $((${#MENU[*]} / 2 + 7)) 74 10 "${MENU[@]}" 3>&1 1>&2 2>&3)" if [ $? -ne 0 ] || [ ! -d "$WP_LOCAL" ]; then echo "Cannot find '${WP_LOCAL}'" 1>&2 exit 100 fi echo "cd ${WP_LOCAL}"
Необходимы wp-cli/find-command
и whiptail
.
Пояснение:
-
Находит все установки WordPress, расположенные ниже $WP_TOP_PATH - должен быть запущен от имени root.
-
Отображает прогресс-бар при получении
blogname
каждой установки. - Выбирает установку из меню и выводит команду
cd
для неё.
--
Некоторые примеры были взяты из: https://make.wordpress.org/cli/handbook/references/shell-friends/