WP-Sweep

Popis

WP-Sweep vyhledává řádky, které WordPress zanechává, a odstraňuje je. Revize příspěvků, které jste upravovali před lety, metadata patřící k příspěvku, který byl smazán, termíny, k nimž není přiřazeno nic, vztahy mezi termíny směřující k příspěvkům, které již neexistují, prošlé dočasné údaje: nic z toho není nikde v wp-admin viditelné, a přitom se to všechno nachází ve vaší databázi.

Využívá standardní funkce WordPressu pro mazání tam, kde je možné se k danému řádku dostat, namísto spouštění přímých mazacích dotazů, takže háčky, na které se spoléhají jiné pluginy, se stále spouštějí. Pouze řádky, které API odmítá zpracovat – osamocená metadata, jejichž ID objektu je 0 – jsou mazány přímo.

Funkce

  • Revize
  • Automatické koncepty
  • Smazané příspěvky
  • Neschválené komentáře
  • Komentáře se spamem
  • Smazané komentáře
  • Osamocené metadata příspěvku
  • Meta údaj o osamoceném komentáři
  • Meta pro osamocené uživatele
  • Osiřelá položka
  • Vztahy mezi osamocenými termíny
  • Nepoužité pojmy
  • Duplicitní metadata příspěvku
  • Duplicitní meta komentáře
  • Duplikovaná meta uživatele
  • Duplicitní položka
  • Dočasné možnosti
  • oEmbed ukládá do mezipaměti v metadatech příspěvku
  • Optimalizuje tabulky databáze

Odstranit použité funkce

  • wp_delete_post_revision()
  • wp_delete_post()
  • wp_delete_comment()
  • delete_post_meta()
  • delete_comment_meta()
  • delete_user_meta()
  • delete_term_meta()
  • wp_remove_object_terms()
  • wp_delete_term()
  • delete_transient()
  • delete_site_transient()

Známé neslučitelnosti

Tyto pluginy ukládají data na místech, která WP-Sweep vyhodnocuje jako osamocená. Před spuštěním čištění chraňte jejich meta klíče pomocí filtrů v sekci „Použití“.

Dary

Strávil jsem většinu svého volného času vytvářením, aktualizací, údržbou a podporou těchto pluginů, pokud máte opravdu rádi mé pluginy a mohli byste mi ušetřit pár dolarů, budu opravdu vděčný. Pokud ne, neváhejte je používat bez jakýchkoli závazků.

Použití

Každé prohledání je nevratné, proto si nejprve zálohujte databázi.

Na obrazovce je uveden seznam všech prohledávání spolu s krátkým popisem toho, co se odstraní, kolik položek to je a jaký podíl z celé tabulky představují. Zaškrtněte ty, které chcete, a použijte hromadnou akci Sweep, nebo použijte tlačítka Sweep a Details v jednotlivých řádcích, jedno po druhém. Na obrazovce není potřeba žádný JavaScript: tlačítka jsou běžné odkazy a hromadná akce je běžný formulář.

Neexistuje žádná obrazovka s nastavením. Jediná věc, kterou stojí za to upravit – počet položek, které se zobrazují v seznamu Details (výchozí hodnota je 500) – je filtr wp_sweep_limit_details. Tento limit existuje proto, že celý vzorek je držen v paměti a zapsán na stránku.

WP-CLI

wp sweep --all
wp sweep revisions
wp sweep revisions auto_drafts deleted_posts

REST API

Všechny tři postupy vyžadují oprávnění activate_plugins.

GET    /wp-json/sweep/v1/count/<name>
GET    /wp-json/sweep/v1/details/<name>
DELETE /wp-json/sweep/v1/sweep/<name>

Názvy položek

revisions, `auto_drafts`, `deleted_posts`, `unapproved_comments`, `spam_comments`, `deleted_comments`, `transient_options`, `orphan_postmeta`, `orphan_commentmeta`, `orphan_usermeta`, `orphan_termmeta`, `orphan_term_relationships`, `unused_terms`, `duplicated_postmeta`, `duplicated_commentmeta`, `duplicated_usermeta`, `duplicated_termmeta`, `optimize_database`, `oembed_postmeta`.

Filtry

  • wp_sweep_postmeta_whitelist (pole) — klíče meta dat příspěvků, které nesmí být nikdy smazány při čištění osamocených nebo duplicitních meta dat příspěvků. * odpovídá libovolné posloupnosti znaků. Výchozí hodnota: prázdné.
  • wp_sweep_commentmeta_whitelist (pole) — totéž, pro metadata komentářů.
  • wp_sweep_usermeta_whitelist (pole) — totéž, ale pro uživatelská metadata.
  • wp_sweep_termmeta_whitelist (pole) — totéž, ale pro metadata termínů.
  • wp_sweep_excluded_taxonomies (pole) — taxonomie, které jsou vynechány při čištění opuštěných vztahů mezi termíny. Výchozí hodnota: array( 'link_category' ).
  • wp_sweep_excluded_termids (pole) — ID termínů, které jsou vyňaty z čištění nepoužívaných termínů. Výchozí nastavení: výchozí termín každé taxonomie a všechny termíny, které jsou nadřazené jiným termínům.
  • wp_sweep_limit_details (int) — počet položek zobrazených v seznamu podrobností. Výchozí hodnota: 500.
  • wp_sweep_capability (řetězec $capability, řetězec $context) — požadované oprávnění. $context je jedna z hodnot sweep, ajax nebo rest.
  • wp_sweep_total_count (int $count, string $name) — celkový počet řádků, na jehož základě se počítá procentuální podíl daného sweepu.
  • wp_sweep_count (int $count, string $name) — počet položek, které by operace sweep odstranila.
  • wp_sweep_details (pole $details, řetězec $name) — ukázkový seznam zobrazený funkcí Details.
  • wp_sweep_sweep (řetězec $message, řetězec $name) — zpráva zobrazená po dokončení prověrky.

Akcie

wp_sweep_admin_post_sweep, `wp_sweep_admin_comment_sweep`, `wp_sweep_admin_user_sweep`, `wp_sweep_admin_term_sweep`, `wp_sweep_admin_option_sweep` and `wp_sweep_admin_database_sweep` all fire below the sweep table, in that order.

Zabraňte smazání konkrétních meta klíčů příspěvků:

add_filter( 'wp_sweep_postmeta_whitelist', function ( $meta_keys ) {
    $meta_keys[] = '_my_plugin_setting';
    $meta_keys[] = '_acme_*';
    return $meta_keys;
} );

Vyloučit další taxonomii z prověřování vztahů mezi osamocenými termíny:

add_filter( 'wp_sweep_excluded_taxonomies', function ( $taxonomies ) {
    $taxonomies[] = 'product_type';
    return $taxonomies;
} );

Snímky obrazovky

Instalace

  1. Nainstalujte a aktivujte plugin. Obrazovka se zobrazí na adrese WP-Admin -> Nástroje -> WP-Sweep.
  2. Než provedete jakékoli vyčištění, zálohujte si databázi. Každé vyčištění je nevratné a nelze jej vrátit zpět.

Nejčastější dotazy

Obrazovka Nástroje –> Vyčistit obsahuje novou adresu

Funkce se stále nachází v sekci Nástroje, ale adresa se změnila z tools.php?page=wp-sweep/admin.php na tools.php?page=wp-sweep. Upravte si prosím všechny záložky.

Původní adresa vycházela ze starého formátu „název souboru pluginu jako slug menu“, který do adresy URL stránky vkládal název instalačního adresáře pluginu. To je také důvod, proč se dříve zobrazovaly chyby na obrazovce u všech, kteří si nainstalovali WP-Sweep do adresáře s jiným názvem — ať už ručně přejmenovaného, nebo rozbaleného jako wp-sweep-2.0.0. Nyní se již nic z toho neděje.

Kam se poděla funkce „Vymazat vše“?

Každý řádek má zaškrtávací políčko a tabulka disponuje hromadnou akcí Sweep. Zaškrtnutím políčka v záhlaví a provedením této akce tedy dosáhnete stejného výsledku jako při použití funkce „Sweep All“ – a navíc můžete vynechat ty položky, které nechcete zahrnout.

Můj kód, který volá funkci WPSweep::get_instance(), přestal fungovat

Ve verzi 2.0.0 byly třídy přejmenovány:

  • WPSweep se nyní jmenuje WP_Sweep
  • WPSweep_Api se nyní nazývá WP_Sweep_API
  • WPSweep_Command se nyní nazývá WP_Sweep_Command

Takže WPSweep::get_instance()->sweep( 'revisions' ) se změní na WP_Sweep::get_instance()->sweep( 'revisions' ). Neexistuje žádný kompatibilní alias, takže starý název vyvolá fatální chybu, místo aby se operace tiše nezdařila.

Každý filtr a každá akce wp_sweep_admin_*_sweep si zachovává svůj původní název.

Jaké filtry mohu použít k ochraně dat před smazáním?

Čtyři filtry podle typu přijímají seznam meta klíčů, které nesmí být nikdy smazány, a každý z nich podporuje * jako zástupný znak:

add_filter( 'wp_sweep_postmeta_whitelist', function ( $keys ) {
    $keys[] = '_my_plugin_setting';
    $keys[] = '_acme_*';
    return $keys;
} );

Totéž platí pro wp_sweep_commentmeta_whitelist, wp_sweep_usermeta_whitelist a wp_sweep_termmeta_whitelist. Termíny jsou chráněny pomocí wp_sweep_excluded_termids a taxonomie jsou vyňaty z čištění opuštěných vztahů mezi termíny pomocí wp_sweep_excluded_taxonomies.

Ve verzi 2.0.0 tyto seznamy také chrání duplikované meta-prohledávání, což dokumentace sice vždy uváděla, ale kód to nikdy nedělal.

Klíč, který jsem chránil, byl stejně smazán, nebo toho zůstalo zachováno až příliš mnoho

Před verzí 2.0.0 se k vyloučení používala klauzule SQL LIKE, přičemž LIKE interpretuje podtržítko jako zástupný znak pro jeden znak. Vzor _my_key se proto shodoval také s Xmy!key a s mnoha dalšími výrazy. Nyní se porovnávání provádí v PHP, takže podtržítko je podtržítko a pouze * je zástupný znak. Zkontrolujte svůj seznam, pokud jste se spoléhali na staré chování.

Zanechá plugin WP-Sweep po odstranění nějaké stopy?

Vůbec nic. WP-Sweep neukládá žádné řádky nastavení, nevytváří žádné databázové tabulky, neregistruje žádná oprávnění a nenaplánovává žádné události. Skript uninstall.php se spustí v každém případě a provede úklid po celé síti, nikoli pouze na prvních sto webech.

Recenze

WP-Sweep is a simple yet powerful plugin that helps keep your WordPress site running smoothly. It cleans up unnecessary data like post revisions, trashed posts, spam comments, unused terms, and more — all using native WordPress functions, which makes it safer than many alternatives. We’ve used WP-Sweep on multiple websites and it’s never caused any issues. It’s lightweight, user-friendly, and does exactly what it promises. The interface is clear and makes it easy to choose what to clean. Highly recommended for anyone looking to optimize their WordPress database without the risk of breaking anything.
22. 1. 2025
great and simple plugin, no licence shit – it just works, thanks!
Přečtěte si všech 139 recenzí

Autoři

WP-Sweep je otevřený software. Následující lidé přispěli k vývoji tohoto pluginu.

Spolupracovníci

Plugin „WP-Sweep“ byl přeložen do 23 jazyků. Děkujeme všem překladatelům za jejich pomoc.

Přeložte “WP-Sweep” do svého jazyka.

Zajímá vás vývoj?

Prohledejte kód, podívejte se do SVN repozitáře, nebo se přihlaste k odběru protokolu vývoje pomocí RSS.

Přehled změn

2.0.0

  • OPRAVENO: Nepoužívané termíny čerpaly údaj „nepoužívané“ ze sloupce s počtem a vlastní čítač jádra počítal zveřejněné příspěvky — takže termín používaný pouze v konceptech, příspěvcích čekajících na zveřejnění, soukromých příspěvcích nebo příspěvcích v koši vykazoval počet nula a byl smazán, čímž byly odstraněny i jeho vztahy. Tyto příspěvky se vrátily bez přiřazených termínů a bez jakéhokoli vysvětlení. Termín nyní musí být přiřazen alespoň k něčemu, byť k čemukoli
  • OPRAVENO: Při hromadném mazání termínů taxonomie se již nic nezaznamenávalo. Problém byl vyřešen pomocí DELETE FROM wp_terms WHERE term_id NOT IN ( SELECT term_id FROM wp_term_taxonomy ), což odstranilo všechny volné řádky v tabulce, nikoli pouze ty, které právě zůstaly osamocené v důsledku hromadného mazání. Spolu s nimi byly smazány i řádky, které obrazovka ani nezapočítala, ani nezobrazila. Nyní uvádí názvy termínů, které se staly osamocenými.
  • OPRAVENO: Funkce „Orphaned Term Relationships“ určovala, zda je řádek osamocený, na základě vyhledání jeho object_id v tabulce wp_posts — což je správný postup pouze v případě, že taxonomie patří k příspěvkům. U taxonomie registrované vůči uživatelům nebo komentářům je object_id ID uživatele nebo komentáře, takže každý vztah, jehož ID náhodou převyšoval počet příspěvků, byl smazán, i když uživatel stále existoval. link_category bylo z tohoto důvodu ručně vyloučeno; vyloučení se nyní odvozuje od toho, k čemu je jednotlivá taxonomie přiřazena
  • OPRAVENO: Prohledávání oEmbed našlo shodu s %_oembed_%, a ve vzoru LIKE se podtržítko shoduje s libovolným jednotlivým znakem – znamenalo to tedy „libovolný meta klíč obsahující oembed s libovolným znakem na začátku nebo na konci“, a šlo o shodu typu obsahuje namísto shody s předponou. Klíče patřící jiným pluginům byly trvale smazány spolu s mezipaměťmi. WordPress je zapisuje jako _oembed_{hash}, takže vzorec je nyní ukotven na začátku a podtržítka jsou escapována.
  • OPRAVENO: Procházení oEmbed bylo jediným typem procházení meta dat, které nikdy nekonzultovalo seznam chráněných klíčů, takže klíč, který web explicitně přidal do wp_sweep_postmeta_whitelist, byl přesto smazán – seznam byl sice načten, ale následně ignorován
  • OPRAVENO: Při optimalizaci databáze byl spuštěn příkaz SHOW TABLES bez předpony, což zahrnuje všechny tabulky ve schématu. V databázi sdílené mezi instalacemi — což je běžné uspořádání hostingu — zobrazení podrobností uvádělo tabulky všech spolunájemců a optimalizace spustila příkaz OPTIMIZE TABLE i pro instalace, které tento správce nespravuje. Nyní je rozsah omezen na předponu této instalace, přičemž pro web, který vyžaduje více, lze použít příkaz wp_sweep_optimize_tables.
  • AKTUÁLNÍ ZPRÁVA: Vyžaduje WordPress 6.8 a PHP 8.2, což představuje zvýšení požadavků oproti verzím 6.0 a 7.4.
  • AKTUÁLNÍ ZPRÁVA: Stránka zůstává v sekci „Nástroje“, ale její adresa se změnila z tools.php?page=wp-sweep/admin.php na tools.php?page=wp-sweep. Starý formulář zahrnoval do adresy URL název instalačního adresáře.
  • AKTUÁLNÍ ZPRÁVA: Třídy byly přejmenovány z WPSweep na WP_Sweep, z WPSweep_Api na WP_Sweep_API a WPSweep_Command –> WP_Sweep_Command. Všechny filtry a akce si zachovávají své názvy.
  • AKTUÁLNÍ ZPRÁVA: Funkce WP_Sweep::$limit_details již neexistuje. Vyvolávejte ji pomocí funkce limit_details() a upravujte ji pomocí filtru wp_sweep_limit_details.
  • AKTUÁLNÍ ZPRÁVA: Šest akcí wp_sweep_admin_*_sweep se spouští pod jedinou tabulkou „sweep“ v pořadí, v jakém tomu bylo vždy, a nikoli pod šesti samostatnými tabulkami.
  • AKTUÁLNÍ ZPRÁVA: Funkce „Sweep All“ již není k dispozici. Zaškrtněte políčko v záhlaví a místo toho použijte hromadnou akci Sweep, která provede totéž a umožní vám některé řádky vynechat.
  • NOVINKA: Hromadné provádění sweepů. Zaškrtněte požadované sweapy a spusťte je najednou, místo abyste je prováděli jeden po druhém.
  • NOVINKA: Hromadné operace jsou na obrazovce seskupeny. Ve filtrovaném zobrazení je každá z nich zařazena pod záhlaví s ikonou – Příspěvek, Komentář, Uživatel, Termín, Možnost, Databáze –, přičemž se jedná o jednu tabulku, takže jedinou hromadnou operací se zpracují všechny položky, které zaškrtnete. Při seřazení sloupce se záhlaví skryjí, místo aby zůstala a popisovala řádky, které již neseskupují.
  • NOVINKA: Skupinové filtry a sloupce s možností třídění, založené na skutečné funkci WP_List_Table.
  • NOVINKA: Celá obrazovka funguje i při vypnutém JavaScriptu. Akce v jednotlivých řádcích jsou běžné odkazy s jednorázovým kódem a hromadná akce je běžné odeslání formuláře.
  • NOVINKA: Seznamy povolených klíčů meta chrání jak duplikované meta-sweepy, tak i ty osamocené, což sice vždy uváděl soubor readme, ale kód to nikdy nezajišťoval.
  • NOVINKA: Filtry wp_sweep_capability a wp_sweep_limit_details. WP-Sweep nemá obrazovku nastavení: Pomocí filtru wp_sweep_limit_details lze změnit limit počtu detailů.
  • NOVINKA: U každého úklidu je pod jeho názvem uveden popis toho, co se při něm odstraňuje, a počty, u nichž se vyplatí zasáhnout, jsou zvýrazněny.
  • NOVINKA: Skript uninstall.php, který provádí úklid v celé síti, nikoli pouze na prvních sto webech. Samotný WP-Sweep nic neukládá: žádné řádky nastavení, žádné tabulky, žádná oprávnění ani naplánované události.
  • NOVINKA: Struktura byla upravena na includes/ v souladu s příručkou k pluginům.
  • NOVINKA: Testovací sady PHPUnit a vitest a automatizované testování (CI) pomocí GitHub Actions pro šest kombinací WordPressu a PHP, a to jak pro jednotlivé weby, tak pro multisite.
  • ZMĚNA: Vyloučení klíčů Meta se porovnávají v PHP, nikoli pomocí SQL LIKE, takže podtržítko v chráněném klíči je považováno za podtržítko, nikoli za zástupný znak.
  • ZMĚNA: Každé volání databáze prochází jednou metodou a každý dotaz je připraven.
  • OPRAVENO: Chyba typu „stored XSS“ na obrazovce pro správu. Seznam podrobností byl sestaven zřetězením řetězců a vložen jako HTML, takže jméno autora komentáře obsahující značky HTML se spustilo jako skript v prohlížeči správce.
  • OPRAVENO: Plugin již nevytváří cesty na základě názvu vlastního adresáře, takže se skript pro správu načte i v případě, že je plugin nainstalován v jiném adresáři než wp-sweep.
  • OPRAVENO: Filtrování wp_sweep_excluded_termids na prázdné pole vedlo k neplatnému SQL dotazu, v důsledku čehož zůstával počet nepoužívaných termínů prázdný.
  • OPRAVENO: Termín byl vyloučen z čištění nepoužívaných termínů vždy, když se jeho ID shodovalo s volbou default_<taxonomy>, a to i v případě, že tato volba odkazovala na termín, který již neexistuje. WordPress dodává default_link_category nastavenou na hodnotu 2, takže na většině webů se termín s ID 2 tiše odmítal vyřadit.
  • OPRAVENO: Při provádění hromadného vymazání bez JavaScriptu byla data smazána a nic se nezobrazovalo; výsledek se nyní zobrazuje.
  • OPRAVENO: Smyčka při odinstalaci v režimu multisite se zastavila na 100 webech, načítala objekty celého webu za účelem čtení jednoho sloupce a zanechala zásobník přepínačů o jeden krok zpět.
  • OPRAVENO: Parametry požadavku jsou očištěny a ověřeny podle vlastního seznamu útoků daného pluginu.
  • OPRAVENO: Dvě hlášení „Sweep Complete“ wp sweep, která se zobrazovala, byla jedinými řetězci v pluginu, které nikdy neprošly překladovými funkcemi