Полезные SQL-запросы к базе данных wordpress — что это и зачем?

Про популярные SQL-запросы к базе данных wordpress в поиске Яндекса и Гугла можно найти несколько статей. Большинство из них — рерайт одного англоязычного текста, которому уже много лет и который писался под старые версии вордпресса. Многие запросы из этих статей не работают. Я предлагаю выборку  SQL-запросов, актуальных на 12 декабря 2013 года,  протестированных для версии wordpress 3.7.1

ИТАК:

Если у вас есть сайт на WordPress, то иногда вы встречаетесь с задачами, которые неудобно, а то и невозможно, решать через панель управления. Но, даже если Ваш сайт взломан и Вы не можете попасть в админку (ситуация не самая типичная, но мне неоднократно встречалась), для многих проблем есть другой путь решения: SQL-запросы для wordpress. Для начала давайте разберемся, что это.

База данных

Вся информация сайта — записи, страницы, пользователи, комментарии и тому подобное — хранится на сервере баз данных MySQL. Доступ к нему, как правило, осуществляется через админку хостинга и приложение, с которым мы будем работать, называется PhpMyAdmin — оно нужно для управления базой данных. Войдя в него, мы увидим примерно такую картину:база данных wordpress

Перед вами база данных вашего сайта. Все сведения в ней хранятся в упорядоченном виде. Грубо говоря, это таблицы, состоящие из строк и столбцов, в которых находится пронумерованная информация (по этим номерам осуществляются связи между таблицами).  Вот, например, таблица с постами:примеры таблиц базы данных вордпресс

ID — это номер записи, а post_author — ID автора и т.д.

Структура базы данных и префиксы таблиц  Wordpress

Теперь рассмотрим, что же именно хранится в наших таблицах.

1)                 wp_posts — основная таблица, в которой хранится контент — записи, их название, авторство, дата создания, статус записи, разрешено ли комментирование и многое другое.

2)                 wp_postmeta — дополнительные данные о записях, таки как прикрепленные файлы и произвольные поля, появляющиеся, например, при установке плагинов.

3)                  wp_users — данные о всех пользователях сайта: их логины, пароли, электронная почта  etc.

4)                 wp_usermeta — профили пользователей и их настройки.

5)                 wp_comments — комментарии для статей

6)                 wp_commentmeta — дополнительная информация о комментариях, например, помечен ли комментарий как спам.

7)                 wp_terms — категории и тэги, к которым может относиться статья.

8)                 wp_term_taxonomy — в этой таблице хранится иерархия категорий, то есть она служит для построения дерева вложенности.

9)                 wp_term_relationships — в этой таблице задается вхождение статьи в какую-либо категорию.

10)             wp_links — все ссылки (блогролл) и информацию о них.

11)             wp_options — все настройки вордпресса: и стандартные, и настройки плагинов.

SQL

SQL — Structured Query Language — это специальный язык для манипуляций с данными. Мы не будем вдаваться в тонкости программирования, поэтому рассмотрим его в общих чертах, чтобы понимать, что именно делают полезные запросы, о которых ниже.

Нас будут интересовать три типа запросов:

1)                 SELECT — выборка данных. Обращаясь к каким-либо таблицам и задавая условия, мы можем получить от базы данных любую выборку. Например, все е-мэйлы комментаторов. Синтаксис такого запроса выглядит так:

SELECT что_выбрать FROM откуда_выбрать WHERE условия;

2)                 UPDATE — изменение данных. Точно также, как и для SELECT, изменить какую-то выборку данных, ограниченных условиями, то есть в общем случае изменяется множество строк таблицы за один раз. Синтаксис:

UPDATE изменяемая_таблица SET что_меняем = на_что_меняем WHERE условия;

3)                 DELETE — удаление данных. Будьте осторожнее с этим оператором, так как данные удаляются из таблиц насовсем. Единственное, что можно сделать, если вы нечаянно удалили лишнее — восстановить базу из резервной копии.

DELETE откуда_удалить WHERE условия;

Полезные запросы к БД вордпресс

Первое, что нужно сделать, когда вы хотите выполнить какой-то запрос, — это сохранить резервную копию ваших данных. Это можно сделать прямо в PhpMyAdmin, в разделе экспорт. Если ваш сайт достаточно большой, выберите способ компресси, например, zip.экспорт бд wordpress

Все запросы, о которых мы будем говорить далее, нужно запускать, пользуясь вкладкой SQL.база данных wordpress

После выполнения запроса вы не должны видеть никаких сообщений об ошибке. (Если вы их видите, значит что-то пошло не так, и лучше восстановить резервную копию.) Результат выполнения запроса должен быть похож на:результат запроса к базе данных wordpress

Смена пароля wordpress

Если по какой-то причине вы потеряли доступ к админке сайта (например, он взломан) и восстановление на почту не работает, то вы можете поменять пароль с помощью запроса

UPDATE wp_users SET user_pass = '$P$BLIwZyiB0J2XvUAsNyKQI1hyEMox0A0', user_activation_key= '' WHERE user_login = 'admin'

После выполнения такого запроса вы сможете зайти в админку с паролем 12345. Не забудьте сразу после входа с этим паролем поменять его на более сложный!

Что именно мы делаем? В поле user_pass таблицы wp_users хранится пароль в зашифрованном виде. Мы меняем его для пользователя с логином admin.

Если вы меняли логин, то вместо ‘admin’ в тексте запроса вы можете смело написать ваш логин.

Если же логин был заменен злоумышленником, то можно попробовать восстановить пароль по ID пользователя, а также вернуть первому пользователю имя admin.

UPDATE wp_users SET user_pass = '$P$BLIwZyiB0J2XvUAsNyKQI1hyEMox0A0', user_activation_key= '',user_login = 'admin' WHERE ID=1;

Кстати, в сети можно встретить множество запросов со сменой пароля с помощью функции MD5. Имейте ввиду, что такой метод не работает и уже довольно давно.

Смена логина wordpress

Если вам не нужно менять пароль, а хочется только сменить логин, то вам поможет следующий запрос:

UPDATE wp_users SET user_login='boss' WHERE user_login='admin'

 

Здесь мы меняем логин пользователя admin на boss. В дальнейшем в админку можно входить по логину boss с тем же паролем, что был у admin.
Закрыть комментарии в категории wordpress

Мы не будем рассматривать, как в принципе закрыть комментирование, потому что сейчаc это легко делается через админку сайта. А закрытие комментариев в какой-либо категории удобно сделать с помощью запроса.

UPDATE wp_posts p
LEFT JOIN wp_term_relationships rel ON ( p.ID = rel.object_id )

LEFT JOIN wp_term_taxonomy tax ON ( tax.term_taxonomy_id = rel.term_taxonomy_id  )

LEFT JOIN wp_terms tm ON ( tm.term_id = tax.term_id )

SET p.comment_status = 'closed'

WHERE tm.slug = 'Uncategorized'

 

 

Мы закрываем комментарии для категории Uncategorized. Вместо этого имени вы можете подставить любое свое название категрии. А если установить comment_status равным не ‘closed’, а ‘open’, комментарии будут открыты. Установка этого поля в значение ‘registered_only’ позволит комментировать только зарегистрированным пользователям.

Закрыть комментарии в старых постах wordpress

Аналогичным образом можно закрыть комментарии в старых постах.

UPDATE wp_posts SET comment_status = 'closed'
WHERE post_date < '2013-01-01' AND post_status = 'publish'

 

 

Здесь post_date – дата создания записи, и мы закроем комментарии ко всем опубликованным записям, созданным ранее 2013 года.
Изменение сайта комментатора

Если комментаторы на сайте злоупотребили возможностью указать URL и понаписали туда всякого спама, то этот URL можно удалить. Давайте рассмотрим две ситуации:

1)      Множество комментаторов с одинаковым URL

В таком случае удобнее всего заменить URL во всех комментариях разом

UPDATE wp_comments
SET comment_author_url = REPLACE(comment_author_url, 'wordpress.org', 'sales-text.ru')

 

 

Используя функцию REPLACE, мы заменяем адрес сайта ‘wordpress.org’ на ‘sales-text.ru’, независимо от того, кто оставил этот комментарий. Естественно, вместо ‘wordpress.org’ и ‘sales-text.ru’ можно подставить любые нужные вам слова.

2)      Один комментатор, спамящий разными URL

UPDATE wp_comments SET comment_author_url = 'http://wordpress.org'

WHERE comment_author = 'Mr WordPress'

AND comment_author_email = 'wordpress@wordpress.org'

Таким образом, мы заменим адрес сайта комментатору Mr WordPress с e-mail wordpress@wordpress.org во всех его комментариях. В принципе, можно удалить из этого запроса последнюю строчку и не указывать e-mail, но тогда есть риск затронуть других комментаторов, если они указали то же имя (оно совершенно не обязано быть уникальным). И, естественно, вместо ‘http://wordpress.org’ можно указать любой другой сайт.

Собрать все e-mail комментаторов wordpress

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

SELECT DISTINCT comment_author_email FROM wp_comments

 

После его выполнения в PhpMyAdmin вы увидите выборку уникальных e-mail комментаторов. Отметив их все и воспользовавшись кнопкой Экспорт, вы можете сохранить их в файл и использовать в дальнейшем по собственному усмотрению.сбор e-mail комментаторов wordpress

Удаление уведомлений wordpress

Комментарии, которые уведомляют вас о том, что на вас кто-то сослался, часто бывают не нужны – популярные записи могут собирать огромное множество таких уведомлений. Если вы решили их удалить, это можно сделать с помощью такого запроса:

DELETE FROM wp_comments WHERE comment_type = 'pingback';

 

Pingback здесь обозначает, что комментарий является таким уведомлением.

Смена домена wordpress

Если вы хотите перенести сайт на новый домен, это также можно быстро и эффективно сделать с помощью запросов. (Если вы переносите сайт на новый хостинг, не забудьте предварительно скопировать туда все файлы. А также импортировать старую базу данных с помощью вкладки Импорт в PhpMyAdmin.)

Замена домена производится несколькими запросами. Первым делом нам надо откорректировать имя в настройках вордпресса – в таблице wp_option.

UPDATE wp_options SET option_value = 'http://new-site.ru/'
WHERE option_name = 'home' OR option_name = 'siteurl'

 

 

Мы меняем значение двух опций – home и siteurl. Не забудьте вписать имя вашего нового домена вместо ‘http://new-site.ru/’.

Теперь нужно поменять имя домена в записях.

UPDATE wp_posts
SET post_content = REPLACE (post_content, 'http://old-site.ru', 'http://new-site.ru')

 

 

Здесь и далее ‘http://old-site.ru’ – старое доменное имя, а ‘http://new-site.ru’ – новое, на которое мы заменяем.

Следующим пунктом надо исправить домен в произвольных полях.

UPDATE wp_postmeta
SET meta_value = REPLACE (meta_value, 'http://old-site.ru','http://new-site.ru')

 

 

Осталось поправить только GUID.

UPDATE wp_posts
SET guid = REPLACE (guid, 'http:// old-site.ru', 'http://new-site.ru')

 

 

Готово! Замена домена выполнена!

Замена любого текста в записях wordpress

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

UPDATE wp_posts
SET post_content = REPLACE (post_content, 'мой сайт', ' <a href="http://my-site.ru">мой сайт</a> ')

 

 

Здесь мы делаем из слов ‘мой сайт’ ссылку на my-site.ru в поле post_content, которое содержит текст записи.

Аналогично можно заменить и что угодно другое. Синтаксис функции REPLACE такой:

REPLACE(имя_поля, что_меняем, на_что_меняем)

Удаление ревизий записей wordpress

По умолчанию в вордпрессе включены ревизии записи. (Ревизии – это промежуточные редакции записи.) Иногда они бывают нужны, и многие не хотят их отключать. А некоторые просто не знают о такой возможности. Тем временем, база сайта забивается огромным количеством этих ревизий и иногда для улучшения производительности сайта их следует удалять.

DELETE a,b,c
FROM wp_posts a

LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)

LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)

WHERE a.post_type = 'revision'

 

 

Здесь мы удаляем все записи, и всю связанную с ними информацию, если их тип ‘revision’.

Деактивация всех плагинов wordpress

Иногда какой-то плагин работает некорректно, и на страницу их настройки зайти становится невозможно. Это можно исправить, не удаляя плагин физически, с помощью запроса, деактивирующего все плагины.

UPDATE wp_options SET option_value = '' WHERE option_name = 'active_plugins'

 

Не забудьте после этого зайти в настройки плагинов и активировать те, которые нужны.

На этом всё. Если Вы хотите узнать, как выполнить какие-то другие полезные запросы – пишите в комментариях.

8 комментариев для “Полезные SQL-запросы к базе данных wordpress — что это и зачем?

    1. Сам не делал, но думаю так:

      1) экспортировать базу сайта Mysql через phpMyadmin на компьютер
      2) Открыть её в блокноте или Notepade++
      3) Заменить через ctrl+H все стандартные куски кода с размерами изображений (например widht=150 на widht=125), сохранить
      4) Импортировать базу обратно в phpMyadmin

  1. Николай, здравствуйте.
    Хочу спросить: у Вас в посте смена домена у ВП описана в 4х запросах. А можно их все объединить в один и выполнить за один раз? Или обязательно поочерёдно?

      1. Да ни в чём, в принципе, просто хотел оптимизировать и ускорить нажимание кнопок…

        Я попробую выполнить все запросы сразу, о результатах отпишу.

        1. Буду благодарен, если отпишетесь и приведёте запрос. Я к слову — сам пользуюсь этой статьёй, когда меняю домены.) Единственный момент — может остаться код со старым доменом в виджете «Текст», можно сменить ручками.

          1. Да, сразу всё в одном выполнить не получилось, выдало мне ошибку #1064 — You have an error in your SQL syntax; со ссылкой на ту строку, где заканчивался певый запрос и начинался второй.

            По отдельности всё сработало.

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

Ваш адрес email не будет опубликован.

Пролистать наверх

Быстрая заявка на консультацию

  1. Заполняем поля (можно просто имя и любой удобный для Вас контакт: почта и/или страница vk и/или ватсап);
  2. Очень хорошо, если вы сможете заполнить и отправить бриф (скачать)
  3. Жмём «Отправить» ;
  4. В течении 24 часов (обычно намного быстрее) – я с Вами свяжусь, а далее всё обсудим и спланируем.
Всегда рад сотрудничеству! C уважением, Николай.