PHPackages                             mfd/delete-hidden - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. mfd/delete-hidden

ActiveTypo3-cms-extension[Database &amp; ORM](/categories/database)

mfd/delete-hidden
=================

Soft-deletes hidden tt\_content records older than N days, including recursive b13/container children.

1.0.0(3mo ago)02.0k↑1187.5%GPL-2.0-or-laterPHP

Since Mar 25Pushed 3mo agoCompare

[ Source](https://github.com/marketing-factory/delete_hidden)[ Packagist](https://packagist.org/packages/mfd/delete-hidden)[ RSS](/packages/mfd-delete-hidden/feed)WikiDiscussions main Synced 3w ago

READMEChangelogDependencies (4)Versions (2)Used By (0)

delete\_hidden
==============

[](#delete_hidden)

TYPO3 extension (v13.4+) that soft-deletes hidden `tt_content` records older than a configurable number of days, including their recursive [b13/container](https://github.com/b13/container) children.

How it works
------------

[](#how-it-works)

1. **FinderService** queries `tt_content` for records where `hidden = 1`, `t3ver_wsid = 0`, and `tstamp` is older than the given threshold. Pages with `tx_delete_hidden_exclude = 1` are skipped.
2. **CleanupService** enforces a safety cap (default 500) and delegates all deletions to TYPO3's `DataHandler` — no direct SQL. Any `DataHandler` error aborts the run immediately.
3. **CleanupCommand** exposes the service as a Symfony Console command.

CLI usage
---------

[](#cli-usage)

```
# Preview candidates without deleting (dry run)
typo3 delete_hidden:cleanup --days=90 --dry-run

# Delete hidden content older than 30 days
typo3 delete_hidden:cleanup --days=30

# Scope to a specific page subtree
typo3 delete_hidden:cleanup --days=90 --page=42

# Override the default safety cap of 500
typo3 delete_hidden:cleanup --days=90 --limit=1000

# Verbose output — shows a table of deleted records
typo3 delete_hidden:cleanup --days=90 -v
```

### Options

[](#options)

OptionDefaultDescription`--days``90`Minimum age in days for a record to be a candidate`--dry-run`—List candidates without performing any deletions`--page``0` (all pages)Restrict to a page subtree by UID`--limit``500`Safety cap — aborts before any deletion when exceeded### Exit codes

[](#exit-codes)

CodeMeaning`0`Success`1`Validation error, safety cap exceeded, or DataHandler errorPage exclusion
--------------

[](#page-exclusion)

Set `tx_delete_hidden_exclude = 1` on a page to exclude all its content from cleanup.

Installation
------------

[](#installation)

```
composer require marketing-factory/delete-hidden
```

Then activate the extension in the TYPO3 backend under **Admin Tools &gt; Extensions** or via CLI:

```
typo3 extension:activate delete_hidden
```

Scheduler task
--------------

[](#scheduler-task)

The extension registers a TYPO3 Scheduler task named **"Delete Hidden Content Elements"**.

1. Navigate to **System &gt; Scheduler** in the TYPO3 backend
2. Add a new task and select **Delete Hidden Content Elements** from the class dropdown
3. Configure the fields:
    - **Days** — minimum age in days for a record to be a candidate (default: 90)
    - **Limit** — maximum records per run (default: 500)
4. Set frequency and save

The Scheduler task always executes (no dry-run mode). If the candidate count exceeds the limit, only the first N records are processed; the rest are handled in subsequent runs.

Running tests
-------------

[](#running-tests)

Tests require the project's Composer dependencies to be installed (the `vendor/` directory at the repository root).

```
# From the repository root — run all unit tests for this extension
phpunit -c extensions/delete_hidden/Tests/Build/UnitTests.xml
```

```
# From the repository root — run all functional tests for this extension (requires running MySQL database via ddev)
phpunit -c extensions/delete_hidden/Tests/Build/FunctionalTests.xml
```

Test files are located in `Tests/Unit/` and `Tests/Functional/`.

Requirements
------------

[](#requirements)

- TYPO3 13.4+
- PHP 8.2+
- [b13/container](https://github.com/b13/container) *(optional)* — required only if the host project uses container elements

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance82

Actively maintained with recent releases

Popularity22

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

90d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/685a4b50e3bd6e3b283fe6652312607bb23103ab4f2f26f3612203d9bed8fd11?d=identicon)[ischmittis](/maintainers/ischmittis)

---

Top Contributors

[![ischmittis](https://avatars.githubusercontent.com/u/904789?v=4)](https://github.com/ischmittis "ischmittis (5 commits)")

###  Code Quality

Static AnalysisPHPStan

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/mfd-delete-hidden/health.svg)

```
[![Health](https://phpackages.com/badges/mfd-delete-hidden/health.svg)](https://phpackages.com/packages/mfd-delete-hidden)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

101466.4k45](/packages/friendsoftypo3-content-blocks)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

41515.2k](/packages/wazum-sluggi)[netresearch/rte-ckeditor-image

Image support in CKEditor for the TYPO3 ecosystem - by Netresearch

611.0M6](/packages/netresearch-rte-ckeditor-image)[lolli/dbdoctor

TYPO3 Database doctor - Find and fix TYPO3 database inconsistencies

45112.5k](/packages/lolli-dbdoctor)[friendsoftypo3/typo3db-legacy

TYPO3\_DB compatibility layer

13532.6k6](/packages/friendsoftypo3-typo3db-legacy)[b13/assetcollector

Asset collector - Add CSS and SVG files and strings as inline style tag/inline svg to the html code.

10123.2k](/packages/b13-assetcollector)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
