Управління ревізією сторінок і постів у WordPress

17

Від автора: WP є система ревізії, яка робить копії сторінок і постів при їх збереженні. Перевага цієї системи – можна відкотитися до більш ранньої версії документа в будь-який час і провести порівняльний аналіз. З її допомогою можна дізнатися, хто винен у тих чи інших спойлерах, а також у граматичних помилках. Ревізії WordPress, видалення ревізій і управління ними — тема цієї статті.

За замовчуванням на одну сторінку і пост задано необмежену кількість ревізій. (Зверніть увагу, що на один пост від одного редактора робиться все одне автозбереження – останнє автозбереження перезаписує попереднє) Для кожної ревізії в WP таблиці posts створюється нова рядок. У таблицях postmeta і term_relationships записів може бути кілька. Для маленьких сайтів таке марнотратство залишиться непомітним, проте на великих установках це може викликати зниження продуктивності і ефективності. З часом таблиці заповнюються надлишковими даними, які ніколи не будуть використовуватися.

Обмеження ревізій

Кількість ревізій можна задати у файлі wp-cinfig.php. Якщо ви не чули про цей файл, рекомендую звернутися до розробника. Перед редагуванням зробіть копію wp-config.php, так як навіть найменша помилка може зламати WP-сайт.

Додайте такий рядок wp-config.php щоб повністю вимкнути ревізії:

define(‘WP_POST_REVISIONS’, 0);

Щоб обмежити кількість ревізій, змініть число додатне ціле. Наприклад, не більше 10 ревізій на сторінку/пост:

define(‘WP_POST_REVISIONS’, 10);

Щоб повернути необмежену кількість ревізій, видаліть рядок або змініть значення на -1:

define(‘WP_POST_REVISIONS’, -1);

Плагіни по ревізіям

Якщо редагувати файл для вас занадто складно, можна встановити плагіни по ревізіям. Наприклад, WP Revisions Limit задає обмеження по ревізіям схожим чином.

Програмне обмеження ревізій

Фільтр wp_revisions_to_keep дозволяє плагінів або файлу теми functions.php контролювати кількість ревізій для певної посади.

У функцію фільтра передається два аргументи:

кількість ревізій за замовчуванням;

об’єкт WP_Post поточного посту.

Функція повинна повернути кількість дозволених ревізій. Код нижче встановлює обмеження в 5 ревізій на пости типу «custom_post»:

add_filter( ‘wp_revisions_to_keep’, ‘control_revisions’, 10, 2 );
function control_revisions($num, $post) {
if(‘custom_post’ == $post->post_type) $num = 5;
return $num;
}

За допомогою WordPress REST API можна вивести список, отримати і видалити ревізії.

Видалення старих ревізій

Методи вище активується миттєво, тому в ідеалі необхідно встановити WP_POST_REVISIONS відразу після установки WP. Тим не менш, установка не видаляє старі ревізії з бази даних MySQL. Старі дані можна очистити, але тут є свої небезпеки. Перед прийняттям будь-яких дій не забудьте…

Зробити бекап бази даних!

Найпростіший варіант – використовувати плагін типу WP-Optimize, який очищає базу даних шляхом видалення ревізій, а також за допомогою інших заходів оптимізації. Плагін можна запустити один раз або задати розклад.

Для безстрашних – можна запускати SQL команду для очищення ревізій. Для початку знадобиться знайти префікс таблиці – він заданий в wp-config.php. Наприклад:

$table_prefix = ‘wp_’;

Префікс wp_ заданий за замовчуванням. Ми візьмемо префікс wp_, але за необхідності змініть посилання. Для видалення всіх ревізій для всіх сторінок і постів відкрийте інструмент адміністрування MySQL типу phpMyAdmin і виконайте наступну SQL команду:

DELETE a,b,c
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_term_taxonomy d ON ( b.term_taxonomy_id = d.term_taxonomy_id )
WHERE a.post_type = ‘revision’
AND d.taxonomy != ‘link_category’;

Все пройде як по маслу, ви отримаєте виблискує чистотою базу даних, а WP помітно прискориться. Ну, або WP не запуститься, і ви втратите десятиліття постів. Але ви ж зробили бекап…