⠀⠀⠀⠀⠀⠀⠀⠀⠀

Коллекция полезных SQL запросов для WordPress (20+)

Блог
Stylelib  Обсудить 

Админ панель WordPress, является по сути лишь панелью управления базой данных,(БД) Системы управления содержимым (англ. Content Management System). Практически вся информация сайта хранится в БД и порой чтобы изменить ту или иную информацию нужно потратить немало времени.

Envato Elements: Миллионы цифровых продуктов. Неограниченная загрузка. От 16.50$ в месяц.
Получить неограниченный доступ

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

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

Чтобы воспользоваться sql командой, вам необходимо:

  1. 1. Войти в PhpMyAdmin, выбрать вашу базу данных WordPress.
  2. 2. Нажмите кнопку «SQL». Вставьте нужный код в окно SQL команды.
  3. 3. Выполните её.

Управление логином/паролем

Смена пароля

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

UPDATE wp_users SET user_pass = MD5('newpass') WHERE user_login = 'admin'

newpass – новый пароль, admin – логин пользователя у которого мы изменяем пароль.

Если вдруг вы забыли логин, но точно помните, что вы были первым юзером на блоге, а значит ваш ID равен 1, то можно идентифицировать юзера для смены пароля по ID (WHERE ID=1):

UPDATE wp_users SET user_pass = MD5('newpass') WHERE ID=1;

Смена логина

По умолчанию WordPress создает 1 логин для пользователя и в дальнейшем его невозможно изменить. Это не совсем так. Логин можно поменять, используя такой SQL запрос:

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

Здесь мы меняем логин admin на shef.

Управление комментированием

Частенько бывает нужно массово закрыть или открыть комментарии или сделать что-то еще с комментариями. Для таких манипуляций можно использовать следующие SQL запросы:

Закрыть комментарии для всех записей:

UPDATE wp_posts SET comment_status = 'closed'

Открыть комментарии для всех записей:

UPDATE wp_posts SET comment_status = 'open'

Комментирование только для зарегистрированных пользователей:

UPDATE wp_posts SET comment_status = 'registered_only'

Удаление спам комментариев

Некоторые антиспам плагины, пропускают все комментарии, подозрительные помечают как спам. Вы можете их одобрить или удалить, простым SQL запросом:

DELETE FROM wp_comments WHERE comment_approved = 'spam'

Если нужно удалить все не одобренные комментарии, используйте:

DELETE FROM wp_comments WHERE comment_approved = 0

Закрыть комментарии в рубрике

Вы можете закрыть комментарии для записей определенной рубрики:

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 = 'stat'

stat – название рубрики.

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

Чтобы закрыть возможность оставлять комментарии для старых постов, например, опубликованных до 1 января 2010 года, используйте SQL запрос:

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

Вы закроете все комментарии старше 2010-01-01

Удаление комментариев с плохими url

Можно удалить комментарии по маске, например, если в url комментатора встречается сочетание букв poker:

DELETE a,b
FROM wp_comments a
	LEFT JOIN wp_commentmeta b ON ( a.comment_ID = b.comment_id )
WHERE
	a.comment_author_url LIKE '%poker%'

Изменение сайта комментатора

Любой url, который указывает комментатор в поле “сайт” можно изменить при редактировании комментария, но если комментариев этого комментатора много, то везде изменять url — занятие для тру-задротов, проще запросом:

UPDATE wp_comments SET comment_author_url = 'http://site.ru'
WHERE comment_author = 'ivanov'
AND comment_author_email = 'ivanov@gmail.com'

site.ru – адрес сайта комментатора

ivanov@gmail.com – почта комментатора

Еще один вариант аналогичный предыдущему примеру. Заменит все совпадения old-site.ru на new-site.ru, в url всех комментаторов:

UPDATE wp_comments SET comment_author_url = REPLACE( comment_author_url, 'old-site.ru', 'new-site.ru' )

Меняем ID родительского комментария

Иногда пользователи некорректно постят древовидные комментарии — отвечая на коммент не используют кнопку “ответить” в итоге получается, что ответ теряется. Чтобы исправить эту ситуацию можно изменить ID родительского коментария, чтобы правильно расположить новый коммент в дереве:

UPDATE wp_comments SET comment_parent=21 WHERE comment_ID=97

21 – родительский комментарий, 97 – комментарий который нужно поправить.

E-mail’ы комментаторов

Вы можете собрать все e-mail’ы своих комментаторов, например, чтобы сделать – рассылку, используя простой SQL запрос:

SELECT DISTINCT comment_author_email FROM wp_comments

В итоге вы получите список всех e-mail.

Управление пингами и уведомлениями

Так же как комментариями, можно управлять пингами. Вот несколько примеров такого управления:

Закрываем возможность принимать пинги

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

UPDATE wp_posts p SET p.ping_status = 'closed'

closed -можно заменить на open и открыть пинги вновь.

Удаляем все уведомления

Уведомления — это те же пинги — это такие “комментарии”, которые оповещают вас о том, что Вася Пупкин сослался на вас. Если вы решили что комментарии вам не нужны, их можно удалить оптом, используя SQL запрос:

DELETE FROM wp_comments WHERE comment_type = 'pingback';

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

Управление метками

Несмотря на то что WordPress предоставляет достаточно гибкий интерфейс управления метками, вам могут пригодится следующие SQL запросы.

Получаем пустые метки

Спустя несколько лет ведения блога, могут появится пустые метки – то есть метки в которых нет записей. В поздних версиях WP такие метки можно удалить, на странице настроек меток, отсортировав их по количеству записей, а в ранних версиях так отсортировать не получится и для такой операции вам в помощь такой SQL запрос, который выведет все метки в которых нет ни одной записи:

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

Вместо post_tag можно написать любую другую таксономию.

Удаляем пустые метки

В предыдущем примере мы получали пустые метки, а теперь просто удалим их:

DELETE a,b,c FROM wp_terms a
	LEFT JOIN wp_term_taxonomy c ON a.term_id = c.term_id
	LEFT JOIN wp_term_relationships b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE (
	c.taxonomy = 'post_tag' AND
	c.count = 0
	)

Если изменить c.count = 0 на c.count < 2, то будут удалены все метки с 0 и 1 записями в них.

Смена домена

Исправляем домен в опциях

При переезде на другой домен, помимо того, что нужно заменить домен везде где он встречается в шаблоне, также нужно изменить записи в Базе Данных в двух местах, в таблице опций (wp_options):

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

Запрос меняет значение полей siteurl и home. Не забудьте поменять site.ru на ваш новый домен!

Исправляем домен в записях

При смене домена, надо позаботится и о том, чтобы в постах были правильные внутренние ссылки, т.е. ссылки из статей на другие статьи блога, после смены домена станут битыми. Обычно конечно настраивается переадресация со старого домена на новый в .htaccess или PHP с 301 редиректом, но помимо этого эстетически правильно, если в статьях не будет ссылок на старый домен. Этим запросом мы заменим все виды ссылок, включая ссылки на картинки:

UPDATE wp_posts SET post_content = REPLACE (post_content, 'old', 'new')

‘old’, ‘new’ старый и новые домены, соответственно. Не забудьте изменить.

Аналогично можно поменять любую строку, например, слово Вордпресс на WordPress. См. пример ниже.

Меняем домен в произвольных полях

В произвольных полях также могут быть записи хранящие какие-либо url’ы на старый домен, поэтому при смене домена возможно нужно заменить домен и в произвольных полях:

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'old', 'new')

‘old’, ‘new’ старый и новые домены, соответственно. Не забудьте изменить.

Редактируем GUID

При смене домена сайта, наверное, нужно позаботиться о том, чтобы у всех записей поле guid в таблице posts было корректное. По факту, я не знаю зачем это поле вообще нужно и где оно используется, ни разу не встречал, чтобы оно на что-то влияло. Поговаривают, что оно нужно для корректной переадресации с некорректных url’ов, но это не так — я проверял.

UPDATE wp_posts SET guid = REPLACE (guid, 'old', 'new')

‘old’, ‘new’ старый и новые домены, соответственно. Не забудьте изменить.

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

Можно заменить текст в постах и сделать это прямо в Базе Данных. Например, добавить атрибут target=”blank” ко всем ссылкам с атрибутом rel=”nofollow”:

UPDATE wp_posts SET post_content = REPLACE (post_content, 'rel="nofollow"', 'target="blank" rel="nofollow"')

Вы можете изменять названия таблицы и поля соответственно на свое усмотрение:

wp_posts – таблица, post_content – поле таблицы.

Еще можно проставить внутренние ссылки с определенным анкором, например, из слова “WordPress” сделать ссылку на какую-нибудь релевантную страницу, чтобы поднять её значимость. В прочем, для этого существуют специальные плагины, которые не трогают текст в БД, а создают ссылки на лету:

UPDATE wp_posts SET post_content = REPLACE (post_content, ' WordPress ', ' <a href="http://site.ru/статья-о-wordpress">WordPress</a> ')

Управление произвольными полями (postmeta)

Удаляем ненужные произвольные поля

Большинство плагинов создают себе произвольные поля, даже если вы отключите или удалите плагин произвольные поля останутся в базе данных. На скорость сайта это не влияет, но БД пополняется такого рода мусора значительно. В такой или подобной ситуации, все произвольные поля с названием, например “meta_name” можно удалить простым SQL запросом:

DELETE pm FROM wp_postmeta pm WHERE pm.meta_key = 'meta_name'

Если название произвольного поля (meta_name) в кириллице, то убедитесь, чтобы кодировка файла из которого будет производиться SQL запрос соответствовала кодировке блога (обычно UTF-8 без BOM).

Получим все произвольные поля с пустым значением

Несмотря на то, что в админке создать произвольное поле не задав ему никакое значение не получится, по крайней мере стандартными средствами, такие “пустые” произвольные поля все же могут быть в вашей Базе Данных. Например, их могут оставить там плагины или кривые руки. Чтобы посмотреть есть ли подобные поля и затем решить их судьбу, воспользуетесь SQL запросом:

SELECT *
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL

или

select * from wp_postmeta where meta_value = ''

Удаляем все произвольные поля с пустым значением

DELETE pm FROM wp_postmeta pm WHERE pm.meta_value = '';

Меняем авторство

Чтобы поменять одного автора статьи на другого (оба пользователя должны быть зарегистрированы разумеется), можно использовать такой SQL запрос:

UPDATE wp_posts SET post_author=1 WHERE post_author=2

где, 1 – ID старого автора, а 2 – ID нового автора. ID пользователей ищите в админке.

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

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

В таблице wp_posts есть поле с названием post_type. В этом поле может встречаться один из таких параметров, как “post”, “page” или “revision”. Если мы хотим избавиться от редакций записей, то нужно выполнить команду удаления всех записей в таблице wp_posts, в которых поле post_type имеет параметр “revision”. Ниже SQL запрос, который удалит все ревизии записей в БД и всякие связи с ними:

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'

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

Бывают ситуации, когда невозможно зайти в админку сайта или сам сайт из-за одного некорректно работающего плагина. Такой плагин можно переименовать или удалить по FTP или просто деактивировать все плагины SQL запросом, что даст возможность войти в админ часть и на страницу списка плагинов:

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

Похожие записи


Leave a Reply

Свежие комментарии