Ссылки и ревизии статей в WordPress

Обычно работаю с 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 ревизия.

Ревизии в WordPress

Ревизии в WordPress



2016-08-07T14:47:26
Веб сайты