Кілька корисних SQL запитів для WordPress

Довший час цей матеріал валявся в мене по закладках, але перед Паскою генеральне прибирання добралось навіть до них. Чтиво цікаве тим, що SQL запити окрім практичного застосування допомагають зрозуміти логіку та архітектуру WordPress.

Операції можна робити як з phpmyadmin, так і робити записи із php-файлів. Єдине побажання — не забудьте зробити бекап бази перед початком.

Зміна паролю

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

Заміна логіну

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

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

Закрити коменти для записів

UPDATE wp_posts SET comment_status = 'closed'

Відкрити коменти

UPDATE wp_posts SET comment_status = 'open'

Коментування лише для зареєстрованих користувачів

UPDATE wp_posts SET comment_status = 'registered_only'

Видаляємо коменти, помічені як спам

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'

Закриваємо коментарі в старих публікаціях, зазначивши дату

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

Закриваємо коментарі, де помічені спамерські 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%'

В стандартних формах коментування часто можна вставляти назву сайту. Якщо Вам не подобається те, що вставив юзер, це можна замінити

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

Переносимо дочірній коментар під інший — тобто змінюємо прив’язку

UPDATE wp_comments SET comment_parent=21 WHERE comment_ID=97

Закриваємо можливість приймати пінги. Доволі помічна річ, якщо бачите, що через це пішло надлишкове навантаження

UPDATE wp_posts p SET p.ping_status = 'closed'

Отримуємо пусті теги. Тобто теги, до яких не прив’язані жодні матеріали

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

Або просто видаляємо їх (пусті теги)

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
	)

Корисні запити при переносі сайту на інший хостинг

При переносі сайту на інший хостинг ми змінюємо домен в опціях БД. Це можна робити ефективніше.

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

А також правимо назву домену в записах. Не забувайте, що якщо у вас є інші плагіни з власними матеріалами, даний запит

UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://new-site.ua', 'http://new-site.ua')

Міняємо назву домена для додаткових полів

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://new-site.ua','http://new-site.ua')

аналогічна операція для полів GUID

UPDATE wp_posts SET guid = REPLACE (guid, 'http://www.newblog.ua', 'http://www.newblog.ua)

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

Видаляємо не потрібні додаткові поля

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

Отримуємо поля з пустими значеннями

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

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

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

Залишити відповідь