WordPress чистят после взлома по одной схеме: убирают шеллы, меняют пароль, закрывают задачу. Плагин с именем «инструмент доступности», принимающий команды через параметр запроса, в этот список не попадает — через месяц через него возвращаются, добавляют фиктивных администраторов и удаляют учётную запись admin через wp_delete_user() без переназначения авторства.
WordPress делает то, что должен: 59 страниц уходят в корзину, 192 файла медиатеки удаляются физически. Корзина для вложений по умолчанию отключена, так работает движок. Главная начинает показывать последние записи блога.
Полный откат бэкапа запрещён: две недели заказов. Восстанавливают по частям, и здесь первая ошибка — нашли b1.png и b2.png с совпадающими именами в другом плагине и скопировали на место. В браузере клиента вместо иконки адреса появляется панель фильтров. Держится несколько часов, потому что кеш на год.
Со второй ошибкой сложнее. Страницы вернули прямым SQL, они открываются. Но Yoast хранит canonical и og:url в отдельной таблице indexables, которая обновляется только через хуки WordPress. Прямой UPDATE хуки не вызывает. 54 страницы отдавали canonical вида /?page_id=101 и микроразметку на момент аварии, пока не запустили wp yoast index --reindex.
Команды, которые выявили бы посторонних администраторов за три недели до этого: wp user list --role=administrator и wp plugin list.
Хроника с логами, SQL-запросы и детали восстановления — на Habr