20 самых необходимых SQL-запросов
Я недавно описывал плагин WordPress SQL Executioner, который позволяет выполнять SQL-запросы прямо из админки блога. Теперь же я приведу вам примеры самых нужных SQL-запросов для WordPress, которые могут очень сильно облегчить вам жизнь в случае каких-либо проблем.
- Смена пароля
Забыли свой пароль администратора в блоге? Не беда, его легко можно сменить следующим запросом:
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';
- Смена логина администратора
По умолчанию в WordPress нельзя изменить логин администратора, который всегда будет “admin“. Это не слишком правильно с точки зрения безопасности, так как дает возможность злоумышленникам перебирать пароли для известного им имени администратора. Изменить логин админа можно запросом:
UPDATE wp_users SET user_login = 'test' WHERE user_login = 'admin';
Где “test” это новый логин администратора блога.
- Смена урлов для 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/‘ это актуальный урл вашего сайта.
- Удаление спам-комментариев
Многим лениво править файлы движка, чтобы использовать мою защиту от спама. Ведь Akismet сейчас ловит почти весь приходящий спам и мало кого радует перспектива применять хак при выходе каждой новой версии WordPress. В результате у блогеров скапливаются тысячи спам-комментариев, очищать которые вручную гиблое дело. Маленький запрос удалит все комментарии, помеченные в блоге как спам:
DELETE FROM wp_comments WHERE comment_approved = 0
- Изменение 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 мог правильно перенаправлять с неправильных урлов записей на правильные.
- Изменение URL в записях
Таким запросом можно поменять все ссылки в ваших записях на корректные.
UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://www.oldblog.ru', 'http://www.newblog.ru');
Необходимо при переносе блога на новый домен, при смене урла сайта, на который вы часто ссылались и т.д. Менять можно не только ссылку, но и любой другой текст в ваших записях.
- Изменение автора записей
Чтобы изменить авторство записей с одного пользователя на другого используйте запрос:
UPDATE wp_posts SET post_author=New_Author_ID WHERE post_author=Old_Author_ID;
Где New_Author_ID это ID нового автора, а Old_Author_ID это ID старого автора.
- Удаление ревизий записей
Ревизии вещь хорошая, но очень уж они быстро забивают базу данных своими копиями. Чтобы разом прибить все ревизии используйте запрос:
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-информацию, которая к ним привязана.
- Удаление лишних 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';
- Вывод неиспользуемых 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-ключи тут выведены не будут.
- Собираем Email’ы комментаторов
Можно собрать базу имейлов из комментаторов вашего блога:
SELECT DISTINCT comment_author_email FROM wp_comments;
Таким образом, вы получите список имейлов ваших комментаторов (без дубликатов). Можно использовать в качестве базы для новостных рассылок заинтересованным посетителям. Правда, пользоваться такой базой надо крайне осторожно, люди не хотят получать лишний спам с каждого блога, где они оставили когда-то свой комментарий.
- Удаление всех пингбеков
Иногда количество пингбеков слишком велико, их можно удалить все сразу:
DELETE FROM wp_comments WHERE comment_type = 'pingback';
- Вывод неиспользуемых тегов
При удалении записи в блоге удаляется только сама запись. Теги же переходят в разряд неиспользуемых (если они были присвоены только этой одной удаляемой записи). Вывести список неиспользуемых тегов можно запросом:
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;
Оставлять такие неиспользуемые теги или удалять решать только вам.
- Деактивация всех плагинов сразу
Иногда при установке какого-либо плагина может возникнуть ситуация, при которой вы уже не можете войти в админку блога. Удалить некорректный плагин можно по ftp, а можно просто деактивировать все плагины, войти в админку и уже там удалить нужный плагин:
UPDATE wp_options SET option_value = '' WHERE option_name = 'active_plugins';
- Удаление всех тегов
Уж не знаю зачем, но возможно вам понадобится удалить все теги сразу. Для этого используйте запрос:
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 )
- Закрытие комментирования старых записей
На буржуйских сайтах часто рекомендуют закрывать комментарии ко всем старым записям, чтобы избежать ненужного спама. Для этого используйте запрос:
UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2011-01-01' AND post_status = 'publish';
Комментирование будет закрыто для всех записей, опубликованных раньше даты “2011-01-01“. Повторюсь опять, проще не закрывать комментирование, а закрыть саму возможность автоматического спама.
- Изменение урла сайта комментатора
Данным кодом можно изменить ссылку на домашний сайт комментатора:
UPDATE wp_comments SET comment_author_url = REPLACE( comment_author_url, 'http://www.oldblog.ru', 'http://www.newblog.ru' );
Бывает очень полезно, когда известный вам сайт комментатора вдруг начинает вести на порно-ресурс вследствие взлома.
- Удаление комментариев по маске
Можно удалить комментарии со ссылками, содержащими определенное стоп-слово:
DELETE FROM wp_comments WHERE comment_author_url LIKE "%porno%" ;
При этом будут удалены все комментарии, у которых в качестве ссылки на домашний сайт комментатора указаны урлы со словом “porno”.
- Частные случаи замены текста
Замену текста в базе можно использовать совершенно для разных вещей. Например, если вы оформляли внешние ссылки в вашем блоге через 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"')
- Управление комментированием
Открыть все записи для комментирования:
UPDATE wp_posts SET comment_status = 'open';
Закрыть все записи для комментирования:
UPDATE wp_posts SET comment_status = 'closed';
Открыть комментирование только для зарегистрированных пользователей:
UPDATE wp_posts SET comment_status = 'registered_only';
На этом пока все. Надеюсь, что эти SQL-запросы вам помогут. Источник