SQL запросы для улучшения WordPress — ч.1

Админка WordPress является по сути лишь панелью управления базой данных движка. Но не все действия — особенно групповые — удобно делать руками через админку. Иногда удобнее запустить PHP MyAdmin и сделать нужное непосредственно через SQL-запросы к базе. Впрочем, SQL запросы можно выполнять даже без запуска PHP MyAdmin, используя специальный, совершенно безобидный плагин SQL Executioner, или пользуясь конструкцией самого вордпресса:

global $wpdb;
$wpdb->query("здесь_код_запроса");

Использовать эту конструкцию можно в файлах темы, например в functions.php или в каком нибудь шаблоне постоянной страницы, в общем, где угодно, главное задействовать.

Удаление неиспользуемых элементов таксономии

Несколько дней назад я удалил ненужные записи с сайта клиента. После чего обнаружил, что на сайте куча ненужных меток (записей в которых нет). Они захламляют БД без надобности и такие пустые метки желательно удалить. Чтобы не делать этого вручную я написал такой запрос:

DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE count = 0 );
DELETE FROM wp_term_taxonomy WHERE term_id NOT IN (SELECT term_id FROM wp_terms);
DELETE FROM wp_term_relationships WHERE term_taxonomy_id NOT IN (SELECT term_taxonomy_id FROM wp_term_taxonomy);

Тут 3 запроса, которые удаляют строки из таблиц wp_terms, wp_term_taxonomy, wp_term_relationships. Первый запрос находит все термины, значение count которых равно 0 и удаляет их. Второй и третий удаляют строки из таблиц wp_term_taxonomy, wp_term_relationships чтобы они соответствовали wp_terms.

Этот запрос удаляет все пустые термины из всех имеющихся таксономий (category, post_tag). Если нужно ограничить такое удаление, например, только метками (post_tag). То первая строка должна выглядеть так:

DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE taxonomy='post_tag' AND count=0 );

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

OPTIMIZE TABLE `wp_terms` , `wp_term_taxonomy` , `wp_term_relationships`;

Ну это, в общем-то, понятно.

Логин, пароль пользователя

Как сбросить пароль пользователя

Иногда жизненно необходимо восстановить (сбросить) пароль или просто поменять его, а доступа к админке сайта нет. Для смены пароля можно использовать такой 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'

Здесь мы меняем логин на shef у пользователя, логин которого был равен 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'

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

Некоторые антиспам плагины, пропускают все комменты, но подозрительные помечают как спам, чтобы, если это не так, потом можно было одобрить комментарий. Например, так делает хваленный Akismet (никогда им не пользовался, он действительно так хорош?). Если спам комментов собралось большое множество, то чистить весь этот мусор руками никак не идет в сравнение с использованием такого простого SQL запроса:

DELETE FROM wp_comments WHERE comment_approved = 'spam'

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

DELETE FROM wp_comments WHERE comment_approved = 0

Удалим URL у всех комментариев

Чтобы очистить значения поля URL у всех комментариев, можно использовать такой запрос:

UPDATE wp_comments SET comment_author_url=''

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

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

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 — дата позднее которой комменты будут закрыты.

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

Можно удалить комментарии по маске, например, если в УРЛе комментатора встречается сочетание букв 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%'

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

Теоретически УРЛ, который указывает комментатор в поле "сайт" можно изменить при редактировании комментария, но если комментариев этого комментатора много, то везде изменять УРЛ — занятие для обезьянок, проще запросом:

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

Где site.ru - УРЛ который мы хотим установить для комментатора, Kamaz - ник комментатора, а kamazer@gmail.com - его email. Ник и мыло я решил указать, чтобы точно идентифицировать комментатора.

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

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'ы комментаторов

Чтобы собрать все мылы комментаторов, например, чтобы сделать какую-нибудь рассылку, можно использовать такой SQL запрос:

SELECT DISTINCT comment_author_email FROM wp_comments

В результате будет получен список из уникальных email'ов.

Пинги и уведомления

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

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

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

UPDATE wp_posts p SET p.ping_status = 'closed'

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

UPDATE wp_posts p SET p.ping_status = 'open'

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

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

DELETE FROM wp_comments WHERE comment_type = 'pingback';

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

Настоящий материал самостоятельно опубликован в нашем сообществе пользователем proper на основании действующей редакции Пользовательского Соглашения. Если вы считаете, что такая публикация нарушает ваши авторские и/или смежные права, вам необходимо сообщить об этом администрации сайта на EMAIL abuse@newru.org с указанием адреса (URL) страницы, содержащей спорный материал. Нарушение будет в кратчайшие сроки устранено, виновные наказаны.

You may also like...


Комментарии