Гид по технологиям

Удаление встроенной рекламы из постов WordPress через один SQL-запрос

5 min read WordPress Обновлено 16 Dec 2025
Удаление рекламы из WordPress через SQL
Удаление рекламы из WordPress через SQL

Пример WordPress блога на экране компьютера

Задача и контекст

Ведение блога на WordPress часто приводит к необходимости массовых правок старых записей: смена темы, изменение видимости содержимого или замена рекламных блоков. В моём случае на нескольких сотнях постов был вручную вставлен рекламный скрипт Google. Вручную править ~1000 записей — долго и ошибочно, поэтому удобнее удалить старый скрипт из базы.

Ключевой принцип: вы должны иметь чёткий маркер начала и конца блока, который хотите удалить. Например, для рекламного блока это могут быть теги после найденного начала).

Успешный вывод выполнения SQL в phpMyAdmin

Просмотр поста без рекламного блока после выполнения запроса

Отладка и случаи, когда метод не сработает

  • Различное форматирование старых вставок. Если у вас есть несколько вариантов кода рекламы (разные атрибуты, разные URL или дополнительные комментарии), простая строковая замена не удалит все варианты.
  • Блоки без чёткого конечного маркера. Если реклама вставлена в середине и нет уникального конечного тега, придётся подбирать более сложные маркеры или использовать регулярные выражения на стороне PHP.
  • Один и тот же скрипт в других частях поста (например, в виджетах) — применяя глобальную замену, можно нечаянно удалить нужные в других местах скрипты. Ограничьте WHERE по post_type или по ID.

Пример непойманного старого варианта Пример старого рекламного блока с другим форматированием

Если блоки различаются, повторите процесс с модифицированными маркерами для каждого формата.

Интерфейс редактирования WordPress после удаления рекламы

Альтернативные подходы

  • WP-CLI search-replace — удобен для поиска/замены по всему сайту из командной строки и поддерживает dry-run: wp search-replace ‘старыйфрагмент’ ‘новыйфрагмент’ –dry-run.
  • Плагины типа Better Search Replace — визуальный интерфейс, тестовый прогон и откат.
  • Экспорт базы в файл, правка в текстовом редакторе с поддержкой регулярных выражений и повторный импорт — полезно при массовых сложных заменах.
  • Написать короткий PHP-скрипт, который загрузит посты, применит preg_replace с корректными регулярными выражениями и сохранит обновлённые записи через WP API.

Безопасность и бэкап SOP

  • Всегда делайте полную резервную копию базы перед изменениями.
  • Тестируйте запросы сначала на ограниченном наборе записей (WHERE ID IN (…)) или используйте транзакции (если таблицы InnoDB).
  • Снимите дамп перед запуском UPDATE и сохраните на отдельном носителе.

Пример простого отката (если у вас есть дамп):

  1. Удалите текущую базу/таблицу (или переименуйте её).
  2. Восстановите дамп стандартными средствами phpMyAdmin или mysql client.

Шаблоны и полезные вариации SQL

  • Вариант для финального тега, если вы хотите искать ближайший закрывающий после начала блока (более надёжно):
UPDATE wp_posts
SET post_content = REPLACE(post_content,
  SUBSTR(post_content,
    LOCATE('', post_content, LOCATE('’, post_content, start_pos) ищет первое закрывающee  после начала блока; +9 — длина строки “”.

  • Вариант для нескольких маркеров: запускайте серию UPDATE с разными парами маркеров или объединяйте условия в WHERE через OR.

Рольовые чек-листы перед запуском

Для разработчика:

  • Проверить SQL-синтаксис и экранирование строк.
  • Запустить SELECT с SUBSTR для 5 тестовых записей.
  • Убедиться, что WHERE ограничивает запрос только нужными постами.

Для администратора сервера:

  • Сделать бэкап базы и файлов.
  • Убедиться, что хватает места для дампа.
  • Проверить права доступа к базе.

Для редактора контента:

  • Просмотреть несколько постов до и после правки.
  • Проверить, что форматирование и изображения не пострадали.

Критерии приёмки

  • Рекламные блоки удалены из всех целевых постов.
  • Страница поста корректно рендерится, HTML валиден и не содержит обрывков скрипта.
  • Файловая и базовая копии доступны для отката.

Мини-методология для повторяемых задач

  1. Инвентаризация: найти все варианты блока.
  2. Тестирование: подготовить SELECT/SUBSTR и проверить на примерах.
  3. Резервирование: сделать бэкап.
  4. Выполнение: выполнить UPDATE по ограниченному набору.
  5. Верификация: проверить результаты и запустить на всех записях.

Тест-кейсы и приёмочные проверки

  • Тест 1: Выполнить SELECT SUBSTR для 5 постов; убедиться, что извлекается полный блок.
  • Тест 2: Выполнить UPDATE на 1-5 записях и вручную проверить корректность вывода на сайте.
  • Тест 3: Проверить логи веб-сервера на предмет ошибок JavaScript после удаления.

Что ещё учесть

  • Если реклама подгружается динамически через виджет или плагин — лучше отключить плагин, чем править базу.
  • В сложных случаях используйте регулярные выражения на уровне PHP, а не чистый SQL.

Важно: перед запуском любых глобальных UPDATE сделайте резервную копию. Откат без дампа может быть невозможен.

Image credits: Shutterstock

Итог

Удаление повторяющихся HTML/JS-блоков из поля post_content таблицы wp_posts — мощный способ быстро почистить сайт от устаревшей рекламы. Метод основывается на LOCATE, SUBSTR и REPLACE и подходит, когда у блока есть чёткие начальный и конечный маркеры. Альтернативы включают WP-CLI, плагины и правку через PHP. Всегда делайте бэкап, тестируйте на выборке и проверяйте результат на нескольких постах.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Блокировка обновлений драйверов в Windows 10
Windows

Блокировка обновлений драйверов в Windows 10

Геометрический логотип в Photoshop — пошагово
Дизайн

Геометрический логотип в Photoshop — пошагово

Снизить пинг в Roblox — быстрое руководство
Игры

Снизить пинг в Roblox — быстрое руководство

Настройка боковой панели Finder в macOS
macOS

Настройка боковой панели Finder в macOS

Шифрование файлов в Vim — защита текстов
Безопасность

Шифрование файлов в Vim — защита текстов

Настройка приложения «Погода» в Windows 10
Руководство

Настройка приложения «Погода» в Windows 10