WP-Sweep

Опис

WP-Sweep проналази редове које Вордпрес оставља за собом и уклања их. Ревизије чланака које сте уређивали пре много година, мета подаци који припадају избрисаном чланку, појмови који ни за шта нису везани, односи појмова који показују на чланке који више не постоје, истекли пролазни подаци: ништа од тога није видљиво нигде у wp-admin, а све је то у вашој бази података.

Користи одговарајуће Вордпрес функције за брисање где год могу да дођу до реда, уместо извршавања необрађених упита за брисање, тако да се куке на које се други додаци ослањају и даље покрећу. Директно се бришу само редови које API одбија да дира — напуштени мета подаци чији је ИБ објекта 0.

Функције

  • Ревизије
  • Аутоматски нацрти
  • Избрисани чланци
  • Неодобрени коментари
  • Непожељни коментари
  • Избрисани коментари
  • Напуштени мета подаци чланака
  • Напуштени мета подаци коментара
  • Напуштени мета подаци корисника
  • Напуштени мета подаци појмова
  • Напуштени односи појмова
  • Некоришћени појмови
  • Дупликати мета података чланака
  • Дупликати мета података коментара
  • Дупликати мета података корисника
  • Дупликати мета података појмова
  • Пролазне могућности
  • oEmbed кешеви у мета подацима чланака
  • Оптимизује табеле базе података

Коришћене функције за брисање

  • 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()

Познате неусаглашености

Ови додаци чувају податке на местима која WP-Sweep тумачи као напуштена. Пре чишћења заштитите њихове мета кључеве филтерима наведеним под „Употреба“.

Донације

Већину слободног времена посвећујем прављењу, ажурирању, одржавању и подршци ових додатака; ако заиста волите моје додатке и можете да одвојите нешто новца, биће ми заиста драго. Ако не, слободно их користите без икаквих обавеза.

Употреба

Свако чишћење је неповратно, зато прво направите резервну копију базе података.

Екран наводи свако чишћење са кратким описом онога што уклања, колико је то ставки и колики је то део табеле. Означите она која желите и користите групну радњу Очисти или користите дугмад Очисти и Детаљи у сваком реду, једно по једно. Ништа на екрану не захтева JavaScript: дугмад су обичне везе, а групна радња је обичан образац.

Нема екрана подешавања. Једина ствар коју вреди подесити — колико ставки наводи Детаљи, подразумевано 500 — је филтер wp_sweep_limit_details. Ограничење постоји јер се цео узорак држи у меморији и уписује у страницу.

WP-CLI

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

REST API

Све три путање захтевају способност activate_plugins.

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

Називи ставки

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`.

Филтери

  • wp_sweep_postmeta_whitelist (array) — мета кључеви чланака који никада не смеју да се избришу чишћењем напуштених или дуплираних мета података чланака. * одговара било ком низу знакова. Подразумевано: празно.
  • wp_sweep_commentmeta_whitelist (array) — исто, за мета податке коментара.
  • wp_sweep_usermeta_whitelist (array) — исто, за мета податке корисника.
  • wp_sweep_termmeta_whitelist (array) — исто, за мета податке појмова.
  • wp_sweep_excluded_taxonomies (array) — таксономије изузете из чишћења напуштених односа појмова. Подразумевано: array( 'link_category' ).
  • wp_sweep_excluded_termids (array) — ИБ-ови појмова изузети из чишћења некоришћених појмова. Подразумевано: подразумевани појам сваке таксономије, плус сваки појам који је матични неком другом.
  • wp_sweep_limit_details (int) — колико ставки приказује списак „Детаљи“. Подразумевано: 500.
  • wp_sweep_defer_counts (bool) — да ли се екран чишћења прво исцртава, а затим добавља бројеве, један по један. Вратите false да би се сви бројеви израчунали заједно са страницом, као што су издања пре 2.0.1 увек радила. Подразумевано: true.
  • wp_sweep_capability (string $capability, string $context) — потребна способност. $context је једно од sweep, ajax или rest.
  • wp_sweep_total_count (int $count, string $name) — укупан број редова у односу на који се мери проценат чишћења.
  • wp_sweep_count (int $count, string $name) — колико ставки би чишћење уклонило.
  • wp_sweep_details (array $details, string $name) — узорак који приказује „Детаљи“.
  • wp_sweep_sweep (string $message, string $name) — порука која се приказује након извршеног чишћења.

Акције

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.

Заштитите одређене мета кључеве чланака од чишћења:

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

Изузмите додатну таксономију из чишћења напуштених односа појмова:

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

Снимци екрана

Постављање

  1. Поставите и укључите додатак. Екран се појављује у WP-Admin -> Алатке -> WP-Sweep.
  2. Направите резервну копију базе података пре него што било шта очистите. Свако чишћење је неповратно и не може да се поништи.

ЧПП

Екран Алатке -> Чишћење има нову адресу

И даље је у Алатке, али адреса је промењена са tools.php?page=wp-sweep/admin.php на tools.php?page=wp-sweep. Ажурирајте обележиваче.

Стара адреса је била застарели облик „датотека додатка као кратко име изборника“, који је у URL странице стављао назив фасцикле у којој је додатак постављен. Због тога се екран раније кварио свима који су WP-Sweep поставили под другим називом фасцикле — ручно преименованим или распакованим као wp-sweep-2.0.0. Ништа од тога се сада не дешава.

Где је нестало „Очисти све“?

Сваки ред има поље за потврду, а табела има групну радњу Очисти, тако да означавање поља за потврду у заглављу и примена радње ради оно што је радило „Очисти све“ — и омогућава вам да изоставите оне које не желите.

Мој исечак који позива WPSweep::get_instance() је престао да ради

Класе су преименоване у 2.0.0:

  • WPSweep је сада WP_Sweep
  • WPSweep_Api је сада WP_Sweep_API
  • WPSweep_Command је сада WP_Sweep_Command

Тако WPSweep::get_instance()->sweep( 'revisions' ) постаје WP_Sweep::get_instance()->sweep( 'revisions' ). Не постоји алијас за усаглашеност, па стари назив изазива кобну грешку уместо да тихо не успе.

Сваки филтер и свака акција wp_sweep_admin_*_sweep задржавају назив који су имали.

Које филтере могу да користим да заштитим податке од чишћења?

Четири филтера по врсти примају списак мета кључева који никада не смеју да се избришу, и сваки подржава * као џокер:

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

Исто важи за wp_sweep_commentmeta_whitelist, wp_sweep_usermeta_whitelist и wp_sweep_termmeta_whitelist. Појмови се штите помоћу wp_sweep_excluded_termids, а таксономије се изузимају из чишћења напуштених односа појмова помоћу wp_sweep_excluded_taxonomies.

У 2.0.0 ови спискови штите и чишћења дуплираних мета података, што је документација одувек тврдила, а кôд никада није радио.

Заштићени кључ је ипак очишћен или је задржано превише

Пре 2.0.0 изузимање је била SQL LIKE клаузула, а LIKE доњу црту третира као џокер за један знак. Образац _my_key је стога подударао и Xmy!key, и још много тога. Подударање се сада одвија у PHP-у, па је доња црта само доња црта, а једини џокер је *. Проверите свој списак ако сте се ослањали на старо понашање.

Да ли WP-Sweep оставља нешто за собом када га избришем?

Ништа. WP-Sweep не чува редове могућности, не прави табеле у бази података, не региструје способности и не заказује догађаје. uninstall.php се ипак извршава и чисти за собом у целој мрежи, а не само на првих сто сајтова.

Рецензије

26. март 2025.
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. јануар 2025.
great and simple plugin, no licence shit – it just works, thanks!
Прочитај свих 139 рецензија

Сарадници и градитељи

„WP-Sweep“ је софтвер отвореног кода. Следећи људи су допринели овом додатку.

Сарадници

„WP-Sweep“ је преведен на 25 језика. Хвала преводиоцима на њиховим доприносима.

Преведите „WP-Sweep“ на свој језик.

Заинтересовани сте за развој?

Прегледајте кôд, погледајте SVN складиште или се претплатите на дневник развоја преко RSS-а.

Дневник измена

2.0.1

  • НОВО: Веза за чишћење у реду додатка на екрану „Додаци“, која отвара Алатке -> Чишћење.
  • ИСПРАВЉЕНО: Екрану чишћења је истицало време на великим базама података. 2.0.0 је израчунавао сваки број пре исписивања иједног бајта — и тражио укупан број редова сваке табеле једном по реду уместо једном, па се SELECT COUNT(*) извршавао над postmeta табелом четири пута по учитавању. Екран се сада одмах исцртава и потом добавља бројеве, један по један захтев, тако да ниједан захтев не надживи временско ограничење PHP-а. Без JavaScript-а, веза их израчунава заједно са страницом као што је 2.0.0 увек радио, а нови филтер wp_sweep_defer_counts потпуно враћа то понашање.
  • ИСПРАВЉЕНО: Бројање чишћења дуплираних мета података добављало је ИБ-ове сваког дуплираног реда у PHP преко GROUP_CONCAT, само да би их сабрало. На postmeta табели са милионима дупликата само то је могло да исцрпи захтев. Бројање сада чита само укупне вредности по кључу; ИБ-ови се читају тамо где су потребни, у чишћењу које их брише.

2.0.0

  • ИСПРАВЉЕНО: Некоришћени појмови су „некоришћено“ читали из колоне броја, а бројач језгра броји објављене чланке — па је појам који користе само нацрти, чланци на чекању, приватни чланци или чланци у отпаду приказивао број нула и брисан је, заједно са својим односима. Ти чланци су се враћали без ознака и без објашњења зашто. Појам сада мора да буде потпуно невезан
  • ИСПРАВЉЕНО: Чишћење појмова таксономије коју више ништа не региструје завршавало се са DELETE FROM wp_terms WHERE term_id NOT IN ( SELECT term_id FROM wp_term_taxonomy ), што обухвата сваки залутали ред у табели, а не само оне које је чишћење управо учинило напуштеним. Редови које екран није ни пребројао ни навео брисани су заједно са њима. Сада наводи појмове које је учинило напуштеним
  • ИСПРАВЉЕНО: Напуштени односи појмова су одређивали да ли је ред напуштен тражећи његов object_id у wp_posts — што поставља право питање само када таксономија припада чланцима. За таксономију регистровану за кориснике или коментаре, object_id је ИБ корисника или коментара, па је сваки однос чији је ИБ случајно премашивао број чланака брисан иако је корисник и даље постојао. link_category је ручно изузиман управо из тог разлога; изузимање се сада изводи из тога за шта је свака таксономија регистрована
  • ИСПРАВЉЕНО: oEmbed чишћење је подударало %_oembed_%, а у LIKE обрасцу доња црта одговара било ком појединачном знаку — па је значило „било који мета кључ који садржи oembed са по једним знаком са обе стране“, и било је подударање садржи уместо префикса. Кључеви који припадају другим додацима трајно су брисани заједно са кешевима. Вордпрес их уписује као _oembed_{hash}, па је образац сада усидрен на почетку, са обезбеђеним доњим цртама
  • ИСПРАВЉЕНО: oEmbed чишћење је било једино чишћење мета података које никада није консултовало списак заштићених кључева, па је кључ који је сајт изричито додао у wp_sweep_postmeta_whitelist ипак брисан — списак је чак и читан за њега, а затим занемариван
  • ИСПРАВЉЕНО: Оптимизовање базе података извршавало је SHOW TABLES без префикса, што обухвата све табеле у шеми. На бази података коју дели више инсталација — уобичајен хостинг аранжман — приказ детаља је наводио табеле свих суседа, а чишћење је извршавало OPTIMIZE TABLE над инсталацијама којима овај администратор не управља. Сада је ограничено на префикс ове инсталације, уз wp_sweep_optimize_tables за сајт који жели више
  • НАРУШАВА УСАГЛАШЕНОСТ: Захтева Вордпрес 6.8 и PHP 8.2.
  • НАРУШАВА УСАГЛАШЕНОСТ: Екран остаје у Алаткама, али му је адреса промењена са tools.php?page=wp-sweep/admin.php на tools.php?page=wp-sweep. Стари облик је стављао назив фасцикле постављања у URL.
  • НАРУШАВА УСАГЛАШЕНОСТ: Класе су преименоване WPSweep -> WP_Sweep, WPSweep_Api -> WP_Sweep_API и WPSweep_Command -> WP_Sweep_Command. Сваки филтер и акција задржавају свој назив.
  • НАРУШАВА УСАГЛАШЕНОСТ: WP_Sweep::$limit_details више не постоји. Прочитајте га помоћу limit_details() и промените филтером wp_sweep_limit_details.
  • НАРУШАВА УСАГЛАШЕНОСТ: Шест акција wp_sweep_admin_*_sweep покреће се испод једне табеле чишћења, редоследом који су увек имале, уместо испод шест засебних.
  • НАРУШАВА УСАГЛАШЕНОСТ: „Очисти све“ више не постоји. Уместо тога означите поље за потврду у заглављу и примените групну радњу Sweep, која ради исто и омогућава вам да изоставите редове.
  • НОВО: Групно чишћење. Означите чишћења која желите и покрените их одједном уместо једно по једно.
  • НОВО: Чишћења су груписана на екрану. Нефилтрирани приказ ставља свако под наслов са иконицом — Чланак, Коментар, Корисник, Појам, Могућност, База података — а остаје једна табела, па једно групно чишћење и даље покреће све што означите. Ређање по колони уклања наслове уместо да их остави да описују редове које више не групишу.
  • НОВО: Групни филтери и колоне које могу да се ређају, из правог WP_List_Table.
  • НОВО: Цео екран ради са искљученим JavaScript-ом. Радње у редовима су обичне везе са једнократним кодом, а групна радња је обично слање обрасца.
  • НОВО: Спискови дозвољених мета кључева штите и чишћења дуплираних мета података, а не само напуштених, што је readme одувек тврдио, а кôд никада није радио.
  • НОВО: Филтери wp_sweep_capability и wp_sweep_limit_details. WP-Sweep нема екран подешавања: wp_sweep_limit_details је начин за промену ограничења за „Детаљи“.
  • НОВО: Свако чишћење има опис онога што уклања, приказан испод назива, а бројеви на које вреди реаговати су наглашени.
  • НОВО: uninstall.php који чисти у целој мрежи, а не само на првих сто сајтова. Сам WP-Sweep не чува ништа: ни редове могућности, ни табеле, ни способности, ни заказане догађаје.
  • НОВО: Преуређено у includes/, према Plugin Handbook-у.
  • НОВО: PHPUnit и vitest скупови тестова и GitHub Actions CI за шест комбинација Вордпреса и PHP-а, за појединачни сајт и мрежу са више сајтова.
  • ИЗМЕЊЕНО: Изузимања мета кључева се подударају у PHP-у уместо помоћу SQL LIKE, па је доња црта у заштићеном кључу доња црта, а не џокер.
  • ИЗМЕЊЕНО: Сваки позив базе података пролази кроз једну методу и сваки упит је припремљен.
  • ИСПРАВЉЕНО: Сачувани XSS на администраторском екрану. Списак „Детаљи“ прављен је спајањем ниски и убациван као HTML, па се име аутора коментара које садржи ознаке извршавало као скрипта у прегледачу администратора.
  • ИСПРАВЉЕНО: Додатак више не гради путање на основу назива сопствене фасцикле, па се администраторска скрипта учитава и када је постављен у фасциклу са другим називом од wp-sweep.
  • ИСПРАВЉЕНО: Филтрирање wp_sweep_excluded_termids на празан низ давало је неважећи SQL, па је број некоришћених појмова остајао празан.
  • ИСПРАВЉЕНО: Појам је изузиман из чишћења некоришћених појмова кад год се његов ИБ подударао са могућношћу default_<taxonomy>, чак и ако је та могућност показивала на појам који више не постоји. Вордпрес долази са default_link_category подешеним на 2, па на већини сајтова појам са ИБ-ом 2 тихо није могао да се очисти.
  • ИСПРАВЉЕНО: Чишћење без JavaScript-а је брисало податке и ништа не би приказало; резултат се сада приказује.
  • ИСПРАВЉЕНО: Петља за уклањање у мрежи са више сајтова заустављала се на 100 сајтова, учитавала целе објекте сајтова да би прочитала једну колону и остављала стек пребацивања неодмотан за један.
  • ИСПРАВЉЕНО: Параметри захтева се чисте и проверавају према сопственом списку чишћења додатка.
  • ИСПРАВЉЕНО: Две поруке „Sweep Complete“ које исписује wp sweep биле су једине ниске у додатку које никада нису прослеђене функцијама за превођење