Как я могу отобразить только сайты, которые используют определённую тему или плагин?

Вопрос или проблема

Мне нужно просмотреть десятки установок WordPress multisite (с поддержкой сети) для сайтов, использующих определенный плагин.

Как я могу перечислить только сайты, использующие определенную тему или плагин, желательно с помощью WP CLI или запроса к базе данных?

WP CLI – самый простой вариант здесь.

Сначала нам нужна массив/список, в который мы можем сохранить желаемые сайты:

results=()

Затем мы получаем список всех сайтов в качестве переменной и перебираем их:

blogs=$(wp site list --fields="blog_id" --format="csv")
for entry in $blogs
do
    if [ "${entry}" == "blog_id" ]; then
        continue # пропустить заголовок CSV
    fi

Далее, получаем активную тему сайта:

    theme=$(wp theme list --status=active --format=csv --fields="name" --url="${entry}" | sed -n 2p)

Здесь я использую | sed -n 2p, чтобы получить вторую строку вывода, чтобы пропустить заголовок CSV.

Затем, если тема сайта совпадает с тем, что мы ищем, добавляем ее в список:

    if $theme == 'mytheme';
    if [ "${theme}" == "mytheme" ]; then
        results+=($entry)
    fi

После этого мы закрываем наш цикл

done

Превращаем наш список в строку, разделенную запятыми, и передаем ее в wp site list через --sites__in:

wp site list --site__in="${results[*]}"

Мы также можем поменять порядок получения темы и проверки вызова wp plugin is-active, если мы хотим отфильтровать по активному плагину, например, wp plugin is-active hello

https://developer.wordpress.org/cli/commands/plugin/is-active/

Ответ или решение

Чтобы найти сайты, использующие определённую тему или плагин в установках WordPress Multisite, вы можете воспользоваться WP CLI или SQL-запросами к базе данных. В этой статье мы рассмотрим наиболее эффективный подход с использованием WP CLI, что является самым простым и удобным методом.

Шаги для определения сайтов по теме или плагину с использованием WP CLI

1. Инициализация массива для хранения результатов

Сначала создадим пустой массив, в который будут добавляться идентификаторы сайтов:

results=()

2. Получение списка всех сайтов

Следующим шагом мы получим список всех сайтов в сети и сохраним их идентификаторы в переменной:

blogs=$(wp site list --fields="blog_id" --format="csv")

3. Цикл по сайтам

Теперь мы можем пройтись по каждому сайту в полученном списке и выполнить необходимые проверки:

for entry in $blogs
do
    if [ "${entry}" == "blog_id" ]; then
        continue # пропустить заголовок CSV
    fi

4. Проверка активной темы

На этом этапе получите активную тему для каждого сайта:

    theme=$(wp theme list --status=active --format=csv --fields="name" --url="${entry}" | sed -n 2p)

5. Сравнение темы с желаемой

После получения темы, мы можем проверить, совпадает ли она с искомой:

    if [ "${theme}" == "mytheme" ]; then
        results+=($entry)
    fi

Здесь mytheme — это название темы, которую вы ищете.

6. Закрытие цикла

Не забудьте закрыть цикл done:

done

7. Вывод результатов

После завершения цикла мы можем вывести список сайтов, которые соответствуют критериям:

wp site list --site__in="${results[*]}"

Фильтрация по активным плагинам

Если вам нужно искать сайты по активным плагинам, вы можете заменить проверку темы на вызов команды wp plugin is-active, чтобы проверять, активен ли конкретный плагин:

if wp plugin is-active hello --url="${entry}"; then
    results+=($entry)
fi

Здесь hello — это название плагина, который вы хотите найти.

Заключение

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

Для получения дополнительной информации о командах WP CLI вы можете обратиться к официальной документации: WP CLI Plugin Commands.

Следуя вышеизложенным шагам, вы сможете эффективно управлять своей сетью WordPress и находить нужные элементы с максимальной продуктивностью.

Оцените материал
Добавить комментарий

Капча загружается...