WordPress хранит каждый кусочек информации, в него поступающий, в базе данных MySQL. В ней можно найти и посты, и страницы, и комментарии, и настройки плагинов — вобщем все. Конечно, админка WordPress дает простой и быстрый доступ ко всем этим данным. И этого хватает… до определенного момента.
Скажем у вас сотни, а может быть тысячи опубликованных постов и вам требуется провести масштабные изменения на блоге. Пройтись по каждой записи и сделать изменения вручную может быть очень трудо и времязатратно, возможны также многочисленные мелкие ошибки по невнимательности. Один из выходов в этой ситуации, работать напрямую в MySQL базой WordPress посредством запросов делать какие-либо изменения.
Есть масса причин редактировать базу данных WordPress. И в этом деле уж никак не обойтись без SQL-запросов. Сегодня мы как раз разберем наиболее часто используемые запросы и сниппеты.
Если ваш хостинг позволяет работать с базой данных напрямую, то воспользуйтесь панелью phpMyAdmin для использования запросов и сниппетов представленных ниже. Если же в услуги хостинга не входит прямой доступ БД — подумайте о смене хостера.
[info]Все, что вы в дальнейшем будете делать со своей базой данных, может привести к непоправивым последствиям. Поэтому всегда делайте бэкапы. Я не несу никакой ответственности за проблемы, которые могут у вас возникнут с БД. Все операции вы выполняете на свой страх и риск.[/info]
Добавляем настраиваемое поле ко всем постам и страницам
Этот сниппет позволит добавить настраиваемые поля ко всем записям и страницам. Вс что нужно сделать — это заменить UniversalCutomField
тем именем, которые вам нужно и MyValue
значением на ваш выбор.
INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID AS post_id, 'UniversalCustomField'
AS meta_key 'MyValue AS meta_value FROM wp_posts
WHERE ID NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'UniversalCustomField');
Если нужно добавить поле только в посты, то используйте вот такой сниппет:
INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID AS post_id, 'UniversalCustomField'
AS meta_key 'MyValue AS meta_value
FROM wp_posts WHERE ID NOT IN
(SELECT post_id FROM wp_postmeta WHERE meta_key = 'UniversalCustomField')
`` AND post_type = 'post';
Если только в страницы, то такой:
INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID AS post_id, 'UniversalCustomField'
AS meta_key 'MyValue AS meta_value
FROM wp_posts WHERE ID NOT IN
(SELECT post_id FROM wp_postmeta WHERE meta_key = 'UniversalCustomField')
AND `post_type` = 'page';
Определить неиспользуемые тэги
Если вы удаляли какие-либо посты, то скорей всего у вас остались теги, которые не упоминаются ни в одном из постов. Такие тэги не нужны и имеет смысл от них избавиться. Чтобы определить неиспользуемые тэги в WordPress можно воспользоваться вот таким сниппетом:
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;
Удаление спам-комментариев
Если у вас очень много спама в комментариях, то используйте этот простой SQL-запрос, который удалит все комментарии с пометкой spam
:
DELETE FROM wp_comments WHERE wp_comments.comment_approved = 'spam';
Удаление неодобренных комментариев
Этот сниппет удалить все комментарии, которые к данному моменту не одобрены:
DELETE FROM wp_comments WHERE comment_approved = 0
Запретить комментирование старых постов
Для это запроса вы можете менять значение comment_status
на open (комментарии открыты), closed (комментарии закрыты) или registered_only (комментарии разрешены только зарегистрированным пользователям). Так же смените дату 2010-01-01
на нужную вам:
UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2010-01-01' AND post_status = 'publish';
Запретить или разрешить пингбэки и трэкбэки
Разрешить пингбэки и трэкбэки можно запросом:
UPDATE wp_posts SET ping_status = 'open';
Запретить пингбэки и трэкбэки можно запросом:
UPDATE wp_posts SET ping_status = 'closed';
Запретить или разрешить пингбэки и трэкбэки до определенной даты
В этом запросе два варианта для значения ping_status
: open (разрешены) и closed (запрещены) и не забудьте поменять дату 2010-01-01
на нужную вам:
UPDATE wp_posts SET ping_status = 'closed' WHERE post_date < '2010-01-01' AND post_status = 'publish';
Удалить комментарии содержащие определенный URL
Если у вас масса комментариев, которые содержат один и тот же URL, то этот сниппет для вас — он удаляет комментарии содержащие определенный URL. Все, что вам нужно сделать это заменить значение nastyspamurl
на нужное. Знаки % означают, что ищутся все вхождения данной строки.
DELETE from wp_comments WHERE comment_author_url LIKE "%nastyspamurl%" ;
Делаем страницы постами и наоборот
Все проще простого. Вот SQL-запрос, который делает посты страницами:
UPDATE wp_posts SET post_type = 'page' WHERE post_type = 'post'
и запрос, делающий страницы постами:
UPDATE wp_posts SET post_type = 'post' WHERE post_type = 'page'
Смена автора постов
Первое, что нам надо сделать — это узнать ID авторов. Для этого воспользуемся вот таким запросом:
SELECT ID, display_name FROM wp_users;
После того как вы узнали ID старого и нового авторов, используйте команду приведенную ниже. Не забудьте заменить NEW_AUTHOR_ID
на ID нового автора и OLD_AUTHOR_ID
на ID старого автора.
UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=OLD_AUTHOR_ID;
Удаляем ревизии записей
Ревизии могут полезны при редактировании записи. Но по-большей части это мусор в базе данных. Используйте вот такой SQL-запрос чтобы удалить все ревизии имеющихся записей в WordPress:
DELETE FROM wp_posts WHERE post_type = "revision";
Разрешить или запретить все плагины WordPress
Если вы когда либо сталкивались с белым экраном смерти или просто не могли залогониться в админку после активации какого-либо плагина этот сниппет поможет вам отключить все плагины и спокойно залогиниться в админку:
UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';
Вручную сменить пароль WordPress
Если вы единственный пользователь в админ панели вашего сайта и ваш логин admin
, вы можете сбросить пароль простым SQL-запросом:
UPDATE `wordpress`.`wp_users` SET `user_pass` = MD5('PASSWORD') WHERE `wp_users`.`user_login` =`admin` LIMIT 1;
где PASSWORD
— ваш новый пароль.
Внутренняя оптимизация это основа продвижения вашего сайта. Как сделать внутреннюю перелинковку в WordPress вы можете почитать на http://iremaker.com
вот это пост-) спс
спасибо)