Initial assessment without passwords Quote before intervention One accountable specialist from start to finish

Find Entry Point And Persistence

An Abandoned Theme Allowed the Attacker Back In

Recover when an abandoned WordPress theme enables reinfection by inventorying inactive code, replacing customisations and closing all writable paths.

Inactive and abandoned themes remain files on the server. If a vulnerable PHP endpoint can be called directly, changing the active theme does not remove the risk. Old child themes and bundled plugins may also contain credentials or writable upload code.

Inventory every theme directory and rebuild required customisations from known sources.

Confirm the theme is truly abandoned

Record theme name, version, vendor/source, last update and whether support/security releases still exist. Check parent and child theme relationships.

Do not label custom code abandoned only because it lacks a public marketplace page; find its owner and repository. Conversely, a familiar brand name does not guarantee the package is maintained.

Preserve the installed copy without executing it.

Check inactive theme exposure

List every theme directory, not only the active one. Search access logs for direct requests to PHP files under the abandoned theme around the first compromise or reinfection.

Compare with file changes, uploaded payloads, administrators and cron events. Record exact paths/times without sharing malicious URLs publicly.

An inactive theme can be reachable even though WordPress never renders it.

Inspect bundled and child code

Themes sometimes include page builders, upload handlers, demo importers or bundled plugins. Inventory these versions independently.

Review child-theme functions.php, custom AJAX/REST handlers, template includes and secrets accidentally committed to source. Treat obfuscated or unexplained loaders as evidence, not something to execute.

Check whether the same theme exists on sibling sites.

Contain direct access

Remove the abandoned theme from public execution after preserving a copy, or block the confirmed vulnerable endpoint during recovery. Keep one current default theme if WordPress health requires it.

Do not rename only the active folder and leave the vulnerable code under another predictable path. Clear opcode/CDN caches after source removal.

Serve maintenance outside the untrusted installation.

Check server rules and generated assets

Themes can write cached CSS/JavaScript, thumbnails and generated PHP under uploads/cache. Compare generated locations with the theme’s documented behaviour and prevent executable content where practical.

Review .htaccess, Nginx/Plesk directives and PHP auto-prepend settings that the theme installer may have modified. A redirect can survive theme deletion in a parent rule.

Purge caches only after preserving representative files and fixing their source.

Preserve the business design

Before replacement, document templates, menus, widgets, custom fields, WooCommerce overrides and brand assets. Do not copy the entire compromised theme into a new child theme.

Recreate necessary presentation using a maintained parent or reviewed custom code. Compare WooCommerce template versions and accessibility/mobile behaviour.

Keep third-party licences and secrets out of repositories.

Search beyond the theme

An attacker who executed PHP may persist in must-use plugins, uploads, cron, database options, users, wp-config.php and hosting tasks. Replace WordPress components and inspect the full account.

Rotate hosting, database, WordPress, SMTP/API and deployment credentials as exposure warrants. An updated theme does not revoke stolen access.

Review backups for the same abandoned directory.

Remove forgotten distribution copies

Search backup, migration, installer and download directories for ZIP files or extracted copies of the theme. A public archive can expose source/secrets; an extracted duplicate can remain executable.

Move incident copies to protected non-web storage and delete obsolete public packages. Check deployment repositories and future release artifacts so the retired theme is not restored automatically.

Document the maintained replacement and its update owner.

Verify the replacement

Test homepage/templates, search, forms, checkout, account pages and emails on the clean build. Confirm no request to the old theme path executes and no malicious files/tasks return.

Monitor 404/security events for continued probes without restoring the vulnerable file. Remove unused themes from production and document ownership.

Request urgent recovery when custom business logic lives inside the abandoned theme. Share inventory and redacted paths—never malware, credentials or customer data through public channels.

BEFORE YOU SEND THE REQUEST

Frequently asked questions.

Do you ask for passwords in the form?+

No. The public form never requests access. Secure credentials are requested only after the scope and quote are approved.

Who reviews the incident?+

The request goes to Jordi Ensenyat, founder of Code Barcelona and a WordPress specialist with more than 15 years of experience.

Is anything changed before the quote?+

No. Visible symptoms and scope are reviewed first. Intervention begins after approval and with a rollback path prepared.

Do you work internationally?+

Yes. WP Repair handles WordPress and WooCommerce incidents in English and Spanish through a remote service.

Assess my incident