Очищення бази даних WordPress

Привіт:) У цьому пості покажу, як очистити базу даних WordPress від зайвого сміття шляхом виконання SQL-запитів та PHP-коду.

Видалити всі тимчасові опції (транзієнти, transients)

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;

Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, блоги на WordPress.

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

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *