Когда я познакомился с возможностями SQL-запросов для базы данных, на которой работает WordPress, например, то теперь с удовольствием ими пользуюсь.
Многие рутинные действия и даже обычные ненужные поиски того, что надо поменять, становятся совершенно лишними, если использовать простые запросы к базе данных сайта. Кроме того, после установки специальных плагинов, SQL-запросы можно делать прямо в админке блога.
Для SQL-запросов часто использую возможности плагина WP-DBManager (автор Lester ‘GaMerZ’ Chan). В меню плагина есть отельный пункт, который так и называется: “RunSQLQuery”:
Конечно, возможность делать SQL-запросы существует и в других плагинах, которые помогают работать с базой данных сайта и обслуживать ее.
Некоторые плагины не предоставляют явно возможность сделать запрос к базе данных, но имеют опции, которые делают эти запросы сами.
Например, в плагине GD Press Tools (автор Milan Petrovic) так примерно выглядит опция смены имени администратора:
Полезные SQL-запросы для блога на WordPress
Некоторые SQL-запросы используются часто, другие – реже. Но в памяти держать все «формулы» сложно, если не пользуешься имя каждый день. Поэтому приходится каждый раз искать, как именно делается тот или иной запрос к базе данных (самые используемые, конечно, записал себе в «блокнотик»).
Чтобы не искать полезные и часто используемые запросы к базе данных сайта на WordPrees, буду собирать из для себя и тем, кому они могут пригодиться. Ниже будет пополняетмый и исправляемый список таких полезных для меня SQL-запросов.
Изменение ID родительского комментария
Иногда пользователи некорректно постят древовидные комментарии: отвечая на комментарий, не используют кнопку «ответить». В итоге получается, что ответ теряется. Чтобы исправить эту ситуацию, можно изменить ID родительского комментария, чтобы правильно расположить новый комментарий в дереве:
UPDATE wp_comments SET comment_parent=21 WHERE comment_ID=97
21 — родительский комментарий, 97 — комментарий который нужно поправить.
Замена текста в записях
Один из самых используемых запросов к базе данных моих сайтов. Например, хочу во всех статьях поменять «Вася» на «Василий»:
UPDATE wp_posts SET post_content = REPLACE (post_content, ‘Вася’, ‘Василий’)
Этот SQL-запрос часто используется при переносе блога на другой домен из с локального хостинга, чтобы поменять ссылки внутренней перелинковки.
Закрыть комментирование в старых постах
Чтобы закрыть возможность оставлять комментарии для старых постов, допустим, опубликованных до 31 декабря 2012 года, можно использовать такой SQL запрос:
UPDATE wp_posts SET comment_status = ‘closed’ WHERE post_date < ‘2012-12-31’ AND post_status = ‘publish’
Хотя в этом случае, я просто закрываю комментарии старых постов, указывая количество дней в настройках: «Настройки» — «Обсуждения» — «Автоматически закрывать обсуждение статей старше [количество] дней».
Управление логином и/или паролем
Изменить логин пароль, например, администратора можно с помощью SQL-запроса.
Смена пароля
Используется кодировка MD5, так как пароль в базе данных храниться в зашифрованном виде.
UPDATE wp_users SET user_pass = MD5(‘newpass’) WHERE user_login = ‘admin’
Новый пароль “newpass” для пользователя с логином “admin”.
Такой запрос нужно сделать, если забыт логин (но IDадмина, как правило, не меняется и равен единице):
UPDATE wp_users SET user_pass = MD5(‘newpass’) WHERE ID=1;
Смена логина
Как уже говорилось, логин можно поменять, хотя при регистрации WordPressутверждает обратное. Сделать это можно простым SQL-запросом к базе данных сайта:
UPDATE wp_users SET user_login=’newlogin’ WHERE user_login=’admin’
Это всё общеизвестно, а далее постараюсь записывать SQL-запросы, которые использовал для каких-то определенных целей. Вот сейчас, например, мне нужно составить запрос к базе данных, который бы изменил статус записей «черновик» на «личные записи».
Смена записей в черновике на личные записи
В принципе, здесь всё просто. За состояние записи отвечает колонка post_statusв таблице wp_post, черновики – draft, личные записи – private. Поэтому SQL-запрос будет примерно такой:
UPDATE wp_posts SET post_status=’private’ WHERE post_status=’draft’;
Перед изменением всех черновиков в личные сообщения не мешало бы удалить все ревизии и другие записи, которые также считаются черновыми. Хотя… не надо: «авточерновики» отмечаются как auto-draft.
Удаление всех комментариев с определенным словом в заголовке
При сохранении постов дневника Liveinternet сохраняются все записи, и открытые, и закрытые. Удаление закрытых записей в дневнике – сложное дело, потому что к ним привязаны комментарии и много чего. Поэтому я попросил админа добавить к началу заголовка всех закрытых записей ###. И теперь, после импорта постов в WordPress, можно с помощью SQL-запроса удалить все записи в заголовке которых есть определенное слово («###» или что-то другое).
DELETE FROM wp_posts WHERE post_title LIKE ‘%###%’
Здесь: DELETE – удалить, FROM wp_posts – из таблицы постов, WHERE – условие удаления, post_title LIKE – если в заголовке поста есть условие (встречается выражение ###).
Удаление всех меток WordPress
При переносе записей из дневника Liveinternet в блог WordPress все метки и рубрики превращаются в новые рубрики. Так как у меня там был полный бедлам, то решил удалить все метки вообще. Их импортировалось больше 100 страниц, поэтому сделаем всё с помощью SQL-запроса. Кстати, интересно, что по запросу «удалить все метки вордпресс» покажут инструкции, которые… все метки не удаляют.
Чтобы удалить ВООБЩЕ ВСЕ метки, попробует такой запрос к базе данных:
DELETE a,b,c FROM wp_terms AS a LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE (c.taxonomy = ‘post_tag’ AND c.COUNT = 0)
Кстати, если указать количество записей с меткой, то можно удалить, например, все метки, которые не используются ни в каких метках (в таблице COUNT = 0) – нужно в условии, в конце запроса, написать так:
WHERE (c.taxonomy = ‘post_tag’ AND c.COUNT = 0)
Замена адреса почты в комментариях с помощью SQL-запроса
UPDATE wp_comments SET comment_author_email = REPLACE (comment_author_email, ’email1′, ’email2′)
Похоже на замену текста в постах, описанную выше.
Чтобы просто установить для всех комментариев email новый email автора, используется простой запрос:
UPDATE wp_comments SET comment_author_email = ’email@test.site’
SQL-запрос при использовании «любых символов»
Ситуация такая: нужно найти на сайте посты с картинками, размещенными на Радикале. Но Радикал загружает изображения на разные поддомены (i002.radikal и др. ) и – вторая проблема — не нужны результаты поиска со ссылками на сайт, а не на картинки. Вместо любого знака ставим нижнее подчеркивание и ищем так: src=___.rаdіkаl.ru
Спасибо!