Обычно работаю с 1С-Битрикс. Но решил сделать этот блог на WordPress, потому что задача стояла тривиальная — сделать блог и ничего больше. Как я уже писал в статье «На чём программируют программисты?» лучше выбрать самый простой инструмент для решения задачи. Нужен блог — берём WordPress. Но из-за отсутствия какого-либо опыта работы с этим движком столкнулся с некоторыми сложностями. Адреса статей в блоге шли не по порядку. Сейчас адреса статей выводятся так
/articles/id_новости/
id — порядковый номер новости. Но в блоге всего 20 статей, а id текущей — 295! Что же поедает номера моих статей? Я хочу чтобы мои стати шли по порядку id=1,2,3,4,5…. А сейчас получается id=295 на 20-ой статье!
Почему порядковый номер в адресе
Часто использую именно цифровые обозначения в адресе, а не буквенную транслитерацию. Потому что у таких адресов есть ряд преимуществ:
- Адрес получается короткий. Сравните числовое обозначение адреса «/articles/283/» и транслитерацию названия «/articles/data_tsentr_ili_khosting_kompaniya/«. По-моему, так называемое «ЧПУ» (человекопонятный URL) довольно бесполезная штука.
- С использованием id статьи в URL не возникнет проблем, если написать статьи с одинаковыми названиями. Могу поспорить, что WordPress обязательно выдаст ошибку, если решите написать статьи с одинаковыми названиями с URL из транслитерации. Ведь адреса страниц получатся одинаковыми. Либо будет открываться только одна статья наугад.
- Это безопасно. Если понадобится использовать id новости из адреса, то легко сделать проверку типов данных и использовать безопасный номер стати (целое число). Тяжело сделать инъекцию, если в адресе стоит число, а не строка.
Решение проблемы
Я написал только 20 статей в блог, а id последней стати уже приближается к трём сотням! Начал разбираться, полез в базу данных. Захожу в самую большую по размеру таблицу и вижу 205 записей со значением ‘revision’:
SELECT post_type FROM wp_posts;
Оказалось что Wordpress сохраняет ревизии (редакции) статей в ту же таблицу, что и опубликованные. Получается, на каждую статью приходится история из её 10 ревизий. В сумме на 20 статей 205 ревизий — ужас. И всё это хранится в базе. Начал копать дальше и в официальном справочнике от WordPress — Codex нашёл описание механизма ревизий и обнаружил константу:
define( ‘WP_POST_REVISIONS’, 3 );
её можно прописать в wp-config.php. Цифра «3» обозначает суммарное количество сохраняемых ревизий публикации + 1 всегда зарезервирована на автосохранение. Таким образом ограничил скорость заполнения базы данных «мусором» из ненужных мне ревизий. Но остался вопрос — что же делать с уже хранящимися ревизиями в базе? Они мне не нужны, поэтому делаю резервную копию всей базы:
mysqldump alexgur >alexgur_160807
и удаляю ревизии:
DELETE FROM wp_posts WHERE post_type = ‘revision’;
P.S.
Поставил значение константы в «1». Теперь делается только автосохранение и 1 ревизия.