SQL запросы для WordPress

18.05.2012

Запросы SQL

WordPress хранит всю свою информацию в базе данных — в 99% случаев это MySQL, хотя этой СУБД дело не ограничивается. Сегодня я хочу рассказать, как можно делать некоторые рутинные операции, используя запросы SQL. Когда записей в блоге становится больше 50 — без этих запросов выполнить массовые операции становится очень долго и муторно. 

Давайте определимся с терминами, чтобы всем было все понятно:

  • СУБД — система управления базами данных. В данном случае это MySQL
  • SQL — это я использую для краткости, подразумевая MySQL
  • SQL запрос — код, написанный на специальном языке запросов MySQL, который позволяет менять таблицы в базе данных.
  • phpMyAdmin — программа, позволяющая работать с базами данных MySQL

Если у вас несколько сотен записей в блоге и вы решили добавить настраиваемые поля (custom field) или свою таксономию — представляете, сколько записей вам нужно перелопатить, чтобы назначить каждой записи некоторое значение? А сколько времени на это уйдет?

В этом случае единственное решение — SQL запросы, которые напрямую меняют вашу базу данных.

Поиск готового запроса (или его написание) займет гораздо меньше времени и избавит от ошибок, которые могут возникнуть при ручном редактировании записей.

Прежде чем выполнять любые действия с БД — сделайте ее резервную копию. Это очень важно, изменения, вносимые запросами — не подлежат восстановлению.

Я не буду рассматривать синтаксис языка запросов MySQL — это обширная тема, которую не стоит изучать поверхностно. Если будет интересно — дайте знать в комментариях, я напишу подробную статью на эту тему. Вернемся к запросам и начнем с самого начала…

Как выполнить запрос SQL?

В 99% случаев, на вашем хостинге установлен phpMyAdmin, он стал, фактически, стандартной программой для каждого хостинга. Именно в нем мы и будем выполнять код наших запросов.

phpMyAdmin

phpMyAdmin

На иллюстрации показано, где нужно вводить код для исполнения.

Примеры SQL запросов, что я даю ниже, выполняются очень просто — копипастим в это окно и жмем «ОК». Система переспросит, уверены ли вы и при положительном ответе выполнит запрос, внеся изменения в БД. Собственно, на этом c phpMyAdmin закончим. Еще раз напоминаю о необходимости резервной копии вашей БД.

Примеры SQL запросов

Удаляем комментарии, помеченные как спам

Я обычно удаляю спам сразу же, но знаю одного человека, который этого не делает и периодически чистит вот таким запросом свою БД:

DELETE FROM wp_comments 
WHERE wp_comments.comment_approved = 'spam';

Удаляем неодобренные комментарии

Этот код используется очень редко, но мало ли, пусть будет

DELETE FROM wp_comments WHERE comment_approved = 0

Отключаем комментарии для записей, старше определенной даты

Код позволяет запретить комментирование записей, которые старше определенной даты, либо разрешить это только для зарегистрированных пользователей.

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

Параметр comment_status может принимать значение open, closed или registered_only. Ну и дата, посты старше которой необходимо обработать.

Включить или отключить трэкбэки и пингбэки для записей

UPDATE wp_posts SET ping_status = 'open';

Тут можно ping_status установить либо open, либо closed
Добавим небольшое уточнение запроса и отключим эту функциональность для записей старше определенной даты:

UPDATE wp_posts SET ping_status = 'closed' 
WHERE post_date < '2012-01-01' AND post_status = 'publish';

Дату устанавливаем такую, какая нужна.

Удаляем комментарии автора, содержащие определенный URL

DELETE from wp_comments 
WHERE comment_author_url LIKE "%spamurl%" ;

Обратите внимание — между %% может быть часть URL и все комментарии автора, адрес которого содержит эту часть — будут улдалены. Допустим, вы укажете там выражение com, в этом случае запрос удалит не только site.com, но и comsite.ru. Будьте внимательны

Удаляем записи, старше Х дней

DELETE FROM `wp_posts`
WHERE `post_type` = 'post'
AND DATEDIFF(NOW(), `post_date`) > X

Не забывайте заменить Х на необходимую цифру дней.

Меняем тип записей со страницы на пост и наоборот

Как вы знаете, в WordPress можно работать с двумя типами записей — страница и пост. У них разное назначение, не будем вдаваться в подробности, но если вы начали вести блог страницами — этот код для вас

UPDATE wp_posts SET post_type = 'post' 
WHERE post_type = 'page'

Для того, чтобы сделать наоборот, посты в страницы — просто меняем местами параметры

UPDATE wp_posts SET post_type = 'page' 
WHERE post_type = 'post'

Меняем автора записей

Мне пришлось однажды использовать этот код, при смене владельца сайта, без удаления старого автора. Запрос выручил, статей было около 250.
Для начала необходимо выяснить ID старого и нового авторов. Делается это с помощью следующего запроса:

SELECT ID, display_name FROM wp_users;

Записываем эту информацию и теперь, собственно, меняем автора:

UPDATE wp_posts SET post_author=NEW_ID 
WHERE post_author=OLD_ID;

Удаляем ревизии записей

Если вы используете ревизии записей, то со временем их в БД скапливается огромное количество. Или вы не знали об их существовании и теперь надо бы их все удалить. Делается это так:

DELETE FROM wp_posts WHERE post_type = "revision";

Кстати, отключаются они добавлением в wp-config.php следующего кода

define('WP_POST_REVISIONS', false);

Отключаем все плагины

Иногда этот код может здорово выручить. После активации нового плагина, написанного нетрезвым разработчиком — вы видите белый экран и ничего не работает, войти в админку тоже нельзя. В этом случае два варианта — либо удалить виновника физически, через FTP, но это в том случае, если виновник известен. Либо использовать этот sql запрос.

UPDATE wp_options SET option_value = 'a:0:{}' 
WHERE option_name = 'active_plugins';

Заменяем имя администратора

Как вы знаете, WordPress использует имя admin для администратора, только в версии 3.0, если я не ошибаюсь, ввели возможность при установке это имя сменить. Его использовать небезопасно и если вы все еще это делаете — этот запрос вам поможет сменить его. Ведь из админки этого сделать нельзя.

UPDATE wp_users SET user_login = 'NewName' 
WHERE user_login = 'admin';

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

UPDATE `wordpress`.`wp_users` 
SET `user_pass` = MD5('НовыйПароль') 
WHERE `wp_users`.`user_login` =`ВашеИмя` LIMIT 1;

Меняем текст в записях

Бывает такое, что нужно массово заменить текст. Например, в том случае, если ваша компания поменяла название с «ЧП Зося» на «ООО Зося»

UPDATE wp_posts SET `post_content`
= REPLACE (`post_content`,
'ЧП Зося',
'ООО Зося');

Меняем адреса картинок

Запрос, вытекающий из предыдущего, который позволит вам сменить пути к картинкам, если вы вынесли их на поддомен, к примеру.

UPDATE wp_posts
SET post_content = REPLACE (post_content,
'src="http://site.com',
'src="http://images.site.com');

Удаляем шорткоды

И еще один запрос по замене контента. Этот код я использовал всего пару раз, но его полезность сложно переоценить.
Он удаляет из текстов записей ненужные больше шорткоды. Самый распространенный вариант применения — у вас была тема, вы использовали ее шорткоды, вроде разделителей, кнопок и прочего. Заменили тему — на месте старых шорткодов будет обычный текст, вроде [twitter_button].

Остается два варианта — либо удалять его запросом, либо добавить обработку шорткода в новый шаблон.

UPDATE wp_post SET post_content = replace(
post_content, '[twitter_button]', '' ) ;

Заменяйте [twitter_button] на ваш шорткод и все.


Вот такая вот получилась подборочка — sql запросы, которые помогают вам с вашим блогом. Если что-то осталось непонятным, спрашивайте в комментариях, постараюсь помочь.
Удачного вам дня

,

Комментариев: 13

  1. Kolya

    Хоть ваши запросы и очень полезные, но я предпочитаю не лезть в базу напрямую, и в код в том числе, у wordpress есть плагины на все случаи жизни, именно поэтому он такой популярный.

    Ответить
  2. Drom

    Видел какой то плагин, который умеет выполнять sql-запросы прямо в админке WordPress, очень удобно, по крайней мере удобней отдельного окна phpmyadmin

    Ответить
  3. GerinG

    ZOng, нет, физически картинки таким образом не удалить. Можно почистить их пути в БД. Но удалять придется все таки руками

    Ответить
  4. ZOng

    Я на своем блоге выполнял только один SQL-запрос, для того чтобы отключить трекбэки, очень полезный списочек, добавил его в избранное, буду использовать, что-то у меня черновиков накопилось очень много для удаления, а кстати картинки тоже будут удаляться или нет?

    Ответить
  5. GerinG

    Romane1, согласен, ошибка может очень дорого стоить. Поэтому плагин предпочтительнее. Однако, как правило плагин выполняет одну задачу, а ставить пачку для разных вариантов — не лучший вариант, согласитесь

    Ответить
  6. Romane1

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

    Ответить
  7. Homka

    WordPress умеет работать как с Mysql так и с PostrgeSQL, соответственно и клиенты будут разные phpmyadmin и phppgmyadmin соответственно.
    За подборку запросов спасибо, не разбираюсь в структуре таблиц wordpress, но будет что почитать )))

    Ответить
  8. akkad

    ДА, спасибо. Полезнейший пост. Сохраню себе, в будущем выручит наверно не раз.

    Ответить
  9. Winmaster

    Привет =)
    Спасибо, давно искал информацию на эту тему!

    Ответить
    • GerinG

      Привет, Игорь
      Отлично. Я давно собирался этот пост написать — вот наконец созрел ))

      Ответить