~ / blog / wordpress

WordPress

Плагины, админка, медиатека и всё, что делает WordPress быстрее и удобнее.

#WordPress 4 мин

Картинки, корзина и слаги при импорте: мусор, который копится годами

media_handle_sideload кладёт файл в папку по дате родителя, опечатка в ID родителя плодит бесхозные вложения, post_status any не видит корзину, восстановление из корзины держится на точном названии, а wp_update_post молча игнорирует чужие ключи. И чек-лист импорта.

· · ·
#WordPress 4 мин

Частичное обновление затирает поля ACF: ID → URL → 0 за два обмена

Импорт сливал get_field со свежими данными и писал обратно update_field: файл с выводом «URL» за два обмена превращался в 0. Сырые значения приходят с ключами полей — наивный патч перестал обновлять цены. Там же цвет массивом и фатал trim() на главной.

· · ·
#WordPress 3 мин

Как доказать, что переписанный импорт ничего не сломал

Снимок → старая версия → откат → новая → откат → побайтовая сверка; на рабочем сайте — то же без записи, через функцию-приёмник. Ловушка двух версий в одном процессе (7,86 против 1,6 с) и почему «страница работает» не доказывает, что данные на месте.

· · ·
#WordPress 3 мин

Ничьи в поле сортировки: на тесте ноль, на рабочем сайте — в каждом списке

Сортировку из базы заменили сортировкой в PHP, а при одинаковом order порядок выбирает база. Запасной путь «по-старому» на втором сайте срабатывал в 10 случаях из 10 (16,83 с вместо 2,15), а прежнего порядка не было вовсе: 12 адресатов из 101 видели пару иначе. Второй ключ ID решает всё.

· · ·
#WordPress 3 мин

Запись в цикле отключает кэш запросов WordPress: clean_post_cache и last_changed

Цикл по 82 адресатам тратил 4,69 с из 4,71 на одинаковые get_posts: запись меты и чистка кэша записи двигают метку last_changed, и все закэшированные результаты WP_Query теряются. Данные один раз до цикла — и обмен вырос с 12 до 104 товаров в минуту.

· · ·
#WordPress 4 мин

Обмен 12 товаров в минуту: какой хук тормозит сохранение

Полный обмен каталога шёл 25 минут: на каждом сохранении тема обходила все 246 товаров ради 80 нужных. Как найти виновника по логу nginx и замеру каждого обработчика save_post и почему LIKE по сериализованной мете — только предварительный отбор.

· · ·
#WordPress 3 мин

Чек-лист: новая функция WordPress на кэшируемом сайте

Вопросы, которые стоит задать до того, как добавлять форму, счётчик или интеграцию: что попадает в HTML, что сбрасывает кэш, куки и заголовки, отдельные запросы и их адреса, крон, формы и проверка глазами анонима.

· · ·
#WordPress 2 мин

Реклама в кэшируемой странице: места, сброс при смене кода и маркировка

Код места одинаков для всех и кэшу не мешает — мешает смена кода в админке: старая кампания живёт в кэше неделю. Четыре места, пустое не выводится, сохранение — полный сброс, ads.txt и подпись «Реклама».

· · ·
#WordPress 3 мин

Каждый ajax и REST-адрес — новая дверь: плагин отдавал заявки без входа

Внутренний плагин статистики отдавал анониму заявки с телефонами за любой период: на шести сайтах от 4 до 181 заявки за пять недель. Защита сравнивала 6 символов с 11. Как правильно — permission_callback, грабля с X-WP-Nonce и проверка своих адресов за 10 минут.

· · ·

$ tail -f /blog

Не пропустите новые статьи

Пишу разборы по скорости сайтов, кэшу и разработке — на живых проектах и с цифрами. Подпишитесь, и ссылка на новую статью придёт сразу после выхода. Без рекламы и спама, отписаться — в один клик.

В Telegramодна кнопка «Старт» в боте

или на почту

связаться

Расскажите о задаче