


Блог IT-шника
Блог IT-шника
Привіт:) У цьому пості покажу, як очистити базу даних WordPress від зайвого сміття шляхом виконання SQL-запитів та PHP-коду.
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_transient_%');
DELETE FROM `wp_options` WHERE `option_name` LIKE ('\_transient\_%');
DELETE FROM `wp_options` WHERE `option_name` LIKE ('_site_transient_%');
// Спосіб 1
DELETE FROM wp_postmeta WHERE post_id IN (SELECT ID FROM wp_posts WHERE post_type = 'revision' AND post_name LIKE '%revision%');
DELETE FROM wp_term_relationships WHERE object_id IN (SELECT ID FROM wp_posts WHERE post_type = 'revision' AND post_name LIKE '%revision%');
DELETE FROM wp_posts WHERE post_type = 'revision' AND post_name LIKE '%revision%';
// Спосіб 2
DELETE a,b,c,d
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)
LEFT JOIN wp_comments d ON (a.ID = d.comment_post_ID)
WHERE a.post_type = 'revision'
Функція delete_post_meta()
видаляє метаполя лише вказаного поста. Якщо потрібно видалити всі довільні поля всіх записів, додайте PHP-код у файл functions.php
global $wpdb;
$meta_key = 'meta_field_name';
$deleted_db_rows = $wpdb->query(
$wpdb->prepare( "DELETE FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key )
);
echo $deleted_db_rows;
У коді значення meta_field_name
замініть на назву метаполя, яке потрібно видалити. Після завершення роботи коду видаліть його або закоментуйте.
Також можна скористатися ще одним варіантом для видалення полів із назвою, наприклад "meta_name
":
DELETE pm FROM wp_postmeta pm WHERE pm.meta_key = 'meta_name';
до змісту ↑
Якщо видалити, наприклад, велику кількість записів WordPress, то у базі даних залишається багато сміття (наприклад, порожніх тегів (міток). Для цього використовуйте наступний SQL-запит:
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);
Якщо потрібно видалити тільки порожні теги:
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`;
до змісту ↑
SELECT * FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;
DELETE pm FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;