20 самых необходимых SQL-запросов
Я недавно описывал плагин WordPress SQL Executioner, который позволяет выполнять SQL-запросы прямо из админки блога. Теперь же я приведу вам примеры самых нужных SQL-запросов для WordPress, которые могут очень сильно облегчить вам жизнь в случае каких-либо проблем.
1. Смена пароля
Забыли свой пароль администратора в блоге? Не беда, его легко можно сменить следующим запросом:
UPDATE wp_users SET user_pass = MD5('12345') WHERE ID=1; |
Паролем тут будет "12345". Можно сменить пароль и для любого другого юзера в блоге, достаточно поменять в запросе ID, который у админа всегда равен 1. Можно также использовать запрос и с указанием конкретного логина:
UPDATE wp_users SET user_pass = MD5('12345') WHERE user_login = 'admin'; |
2. Смена логина администратора
По умолчанию в WordPress нельзя изменить логин администратора, который всегда будет "admin". Это не слишком правильно с точки зрения безопасности, так как дает возможность злоумышленникам перебирать пароли для известного им имени администратора. Изменить логин админа можно запросом:
UPDATE wp_users SET user_login = 'test' WHERE user_login = 'admin'; |
Где "test" это новый логин администратора блога.
3. Смена урлов для WordPress и сайта
Обычно адрес WordPress и адрес сайта в настройках блога совпадают, но иногда пользователи хотят вынести блог в отдельную папку, для этого они меняют адрес сайта или адрес WordPress, не меняя при этом физическое расположение файлов движка. В результате они не могут больше войти в админку блога. Исправить данную ситуацию можно через запрос:
UPDATE wp_options SET option_value = 'http://www.testwp.ru/' WHERE option_name = 'home' OR option_name = 'siteurl'; |
Где 'http://www.testwp.ru/' это актуальный урл вашего сайта.
4. Удаление спам-комментариев
Многим лениво править файлы движка, чтобы использовать мою защиту от спама. Ведь Akismet сейчас ловит почти весь приходящий спам и мало кого радует перспектива применять хак при выходе каждой новой версии WordPress. В результате у блогеров скапливаются тысячи спам-комментариев, очищать которые вручную гиблое дело. Маленький запрос удалит все комментарии, помеченные в блоге как спам:
DELETE FROM wp_comments WHERE comment_approved = 0 |
5. Изменение GUID
При смене домена у сайта необходимо поменять значение GUID (globally unique identifier) в таблице wp_posts. Простой смены адреса сайта и WordPress в настройках блога недостаточно! GUID необходимо менять даже при переезде с localhost к хостеру.
UPDATE wp_posts SET guid = REPLACE (guid, 'http://www.oldblog.ru', 'http://www.newblog.ru'); |
Формально у вас все будет работать и без этого запроса, но смена GUID необходима, чтобы WordPress мог правильно перенаправлять с неправильных урлов записей на правильные.
6. Изменение URL в записях
Таким запросом можно поменять все ссылки в ваших записях на корректные.
UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://www.oldblog.ru', 'http://www.newblog.ru'); |
Необходимо при переносе блога на новый домен, при смене урла сайта, на который вы часто ссылались и т.д. Менять можно не только ссылку, но и любой другой текст в ваших записях.
7. Изменение автора записей
Чтобы изменить авторство записей с одного пользователя на другого используйте запрос:
UPDATE wp_posts SET post_author=New_Author_ID WHERE post_author=Old_Author_ID; |
Где New_Author_ID это ID нового автора, а Old_Author_ID это ID старого автора.
8. Удаление ревизий записей
Ревизии вещь хорошая, но очень уж они быстро забивают базу данных своими копиями. Чтобы разом прибить все ревизии используйте запрос:
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' |
Данный запрос не только удалит ненужные ревизии, но и всю meta-информацию, которая к ним привязана.
9. Удаление лишних Meta
Многие плагины хранят нужную им информацию в таблице wp_postmeta. При удалении плагинов большинство из них не чистит за собой эту информацию, вручную удалить ее можно запросом:
DELETE FROM wp_postmeta WHERE meta_key = 'your-meta-key'; |
Где your-meta-key это и есть удаляемый meta-ключ. Например, плагин Another WordPress Meta Plugin хранит свою информацию в meta-ключе под названием "description". При удалении этого плагина вся введенная информация остается в базе данных и удалить ее можно запросом:
DELETE FROM wp_postmeta WHERE meta_key = 'description'; |
10. Вывод неиспользуемых Meta
В продолжение запроса удаления ненужных meta. Данный запрос выведет все неиспользуемые meta-ключи в вашем блоге.
SELECT * FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL |
Только вот небольшая оговорка - это будет список тех meta, которые не содержат информации. Если вы пользовались плагином, вводили информацию, а потом удалили плагин, то его meta-ключи тут выведены не будут.
11. Собираем Email'ы комментаторов
Можно собрать базу имейлов из комментаторов вашего блога:
SELECT DISTINCT comment_author_email FROM wp_comments; |
Таким образом, вы получите список имейлов ваших комментаторов (без дубликатов). Можно использовать в качестве базы для новостных рассылок заинтересованным посетителям. Правда, пользоваться такой базой надо крайне осторожно, люди не хотят получать лишний спам с каждого блога, где они оставили когда-то свой комментарий.
12. Удаление всех пингбеков
Иногда количество пингбеков слишком велико, их можно удалить все сразу:
DELETE FROM wp_comments WHERE comment_type = 'pingback'; |
13. Вывод неиспользуемых тегов
При удалении записи в блоге удаляется только сама запись. Теги же переходят в разряд неиспользуемых (если они были присвоены только этой одной удаляемой записи). Вывести список неиспользуемых тегов можно запросом:
SELECT * FROM wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0; |
Оставлять такие неиспользуемые теги или удалять решать только вам.
14. Деактивация всех плагинов сразу
Иногда при установке какого-либо плагина может возникнуть ситуация, при которой вы уже не можете войти в админку блога. Удалить некорректный плагин можно по ftp, а можно просто деактивировать все плагины, войти в админку и уже там удалить нужный плагин:
UPDATE wp_options SET option_value = '' WHERE option_name = 'active_plugins'; |
15. Удаление всех тегов
Уж не знаю зачем, но возможно вам понадобится удалить все теги сразу. Для этого используйте запрос:
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 ) |
16. Закрытие комментирования старых записей
На буржуйских сайтах часто рекомендуют закрывать комментарии ко всем старым записям, чтобы избежать ненужного спама. Для этого используйте запрос:
UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2011-01-01' AND post_status = 'publish'; |
Комментирование будет закрыто для всех записей, опубликованных раньше даты "2011-01-01". Повторюсь опять, проще не закрывать комментирование, а закрыть саму возможность автоматического спама.
17. Изменение урла сайта комментатора
Данным кодом можно изменить ссылку на домашний сайт комментатора:
UPDATE wp_comments SET comment_author_url = REPLACE( comment_author_url, 'http://www.oldblog.ru', 'http://www.newblog.ru' ); |
Бывает очень полезно, когда известный вам сайт комментатора вдруг начинает вести на порно-ресурс вследствие взлома.
18. Удаление комментариев по маске
Можно удалить комментарии со ссылками, содержащими определенное стоп-слово:
DELETE FROM wp_comments WHERE comment_author_url LIKE "%porno%" ; |
При этом будут удалены все комментарии, у которых в качестве ссылки на домашний сайт комментатора указаны урлы со словом "porno".
19. Частные случаи замены текста
Замену текста в базе можно использовать совершенно для разных вещей. Например, если вы оформляли внешние ссылки в вашем блоге через rel="nofollow", то можно автозаменой сделать все эти ссылки, открываемыми в новом окне браузера:
UPDATE wp_posts SET post_content = REPLACE (post_content, 'rel="nofollow"', 'target="_blank" rel="nofollow"') |
А можно наоборот, сделать все открываемые в новом окне браузера ссылки закрытыми через rel="nofollow":
UPDATE wp_posts SET post_content = REPLACE (post_content, 'target="_blank"', 'target="_blank" rel="nofollow"') |
20. Управление комментированием
Открыть все записи для комментирования:
UPDATE wp_posts SET comment_status = 'open'; |
Закрыть все записи для комментирования:
UPDATE wp_posts SET comment_status = 'closed'; |
Открыть комментирование только для зарегистрированных пользователей:
UPDATE wp_posts SET comment_status = 'registered_only'; |
На этом пока все. Надеюсь, что эти SQL-запросы вам помогут.
Понравился пост? Подпишись на обновления по RSS или Twitter !
Доставка грузов из Китая Регулярная доставка грузов из Китая в Москву. tk-ptg.ru | Запчасти weichai Купить запчасти weichai в Томске. tomsk.doravtosnab.ru |
#21,
Александр, подскажите как и где применять эти запросы, я правильно поняла, в админке мускула?
#22,
именно там.
#23,
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'
При таком запросе выдает = Unknown column 'b.objekt_id' in 'on clause'
Что исправить?
#24,
не знаю.
только что зашел в базу и попробовал данный код - все сработало на ура. я несколько не понял - откуда у вас взялось b.objekt_id, когда там b.object_id?
#25,
20 минут совокуплял мозг админа хостинга "Украина", в надежде, что он мне поможет поменять УРЛ ссылок в post_content и guid. В итоге это чудо меня направило искать проблему в wp-options. Понял, что надеяться на него не стоит, пошел в поисковик и с первого же запроса попал на эту статью, которая помогла решить сразу 2 мои задачи. Спасибо.
#26,
Искала запрос для удаления ревизий с метаданными. Только Ваш сработал. Спасибо.
#27,
Большое спасибо за статью с такими необходимыми запросами, сохранил страницу в закладках. Часто пользуюсь
#28,
Здрасти
Подскажите пожалуйста, возможно вы знаете
вот у меня в каждом заголовке присутствует слово "сайт"
вот как с помощью sql запроса заменить слово "сайт" на любое другое слово, например "музыка"
если делаю вот так
UPDATE wp_posts SET `post_title` = REPLACE (`post_content`, 'сайт', 'музыка');
то удаляется полностью весь заголовок поста