Descrición
WP-Sweep atopa as filas que WordPress deixa atrás e elimínaas. Revisións de entradas que editaches hai anos, meta pertencente a unha entrada que se eliminou, termos asociados a nada, relacións de termos que apuntan a entradas que xa non existen, datos transitorios caducados: nada diso é visible en ningures de wp-admin, e todo está na túa base de datos.
Usa as funcións de eliminación propias de WordPress sempre que poden chegar á fila, en vez de executar consultas de eliminación directas, para que os hooks nos que se apoian outros plugins sigan activándose. Só as filas que a API se nega a tocar — meta orfa cuxo ID de obxecto é 0 — elimínanse directamente.
Características
- Revisións
- Borradores automáticos
- Entradas eliminadas
- Comentarios sen aprobar
- Comentarios spam
- Comentarios eliminados
- Meta de entradas orfa
- Meta de comentarios orfa
- Meta de usuarios orfa
- Meta de termos orfa
- Relacións de termos orfas
- Termos sen usar
- Meta de entradas duplicada
- Meta de comentarios duplicada
- Meta de usuarios duplicada
- Meta de termos duplicada
- Opcións de datos transitorios
- Cachés de oEmbed na meta de entradas
- Optimiza as táboas da base de datos
Funcións de eliminación usadas
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()
Incompatibilidades coñecidas
Estes plugins gardan datos en lugares que WP-Sweep le como orfos. Protexe as súas claves meta cos filtros de Usage antes de limpar.
- Custom Fonts
- Elementor Popup Builder
- MailPress
- Meta Slider
- Polylang
- Slider Revolution
- Viba Portfolio
- WPML
Doazóns
Dediquei a maior parte do meu tempo libre a crear, actualizar, manter e dar soporte a estes plugins. Se che gustan de verdade e podes axudarme cun par de euros, agradecereino moito. Se non, sénteste libre de usalos sen ningunha obriga.
Uso
Toda limpeza é irreversible, así que fai primeiro unha copia de seguranza da túa base de datos.
A pantalla lista cada limpeza cunha breve descrición do que elimina, cantos elementos son e que proporción da táboa representan. Marca as que queiras e usa a acción en lote Sweep, ou usa os botóns Sweep e Details de cada fila un a un. Nada na pantalla precisa JavaScript: os botóns son ligazóns normais e a acción en lote é un formulario normal.
Non hai pantalla de axustes. O único que vale a pena axustar — cantos elementos lista Details, 500 por defecto — é o filtro wp_sweep_limit_details. O límite existe porque toda a mostra se garda en memoria e se escribe na páxina.
WP-CLI
wp sweep --all
wp sweep revisions
wp sweep revisions auto_drafts deleted_posts
API REST
As tres vías precisan a capacidade activate_plugins.
GET /wp-json/sweep/v1/count/<name>
GET /wp-json/sweep/v1/details/<name>
DELETE /wp-json/sweep/v1/sweep/<name>
Nomes dos elementos
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`.
Filtros
wp_sweep_postmeta_whitelist(array) — claves de meta de entrada que nunca se deben eliminar, nin pola limpeza de meta de entrada orfa nin pola de duplicada.*coincide con calquera serie de caracteres. Por defecto: baleiro.wp_sweep_commentmeta_whitelist(array) — o mesmo, para a meta de comentarios.wp_sweep_usermeta_whitelist(array) — o mesmo, para a meta de usuarios.wp_sweep_termmeta_whitelist(array) — o mesmo, para a meta de termos.wp_sweep_excluded_taxonomies(array) — taxonomías que quedan fóra da limpeza de relacións de termos orfas. Por defecto:array( 'link_category' ).wp_sweep_excluded_termids(array) — IDs de termos que quedan fóra da limpeza de termos sen usar. Por defecto: o termo por defecto de cada taxonomía, máis calquera termo que sexa pai doutro.wp_sweep_limit_details(int) — cantos elementos amosa unha lista de Details. Por defecto: 500.wp_sweep_defer_counts(bool) — indica se a pantalla de Sweep se mostra primeiro e obtén despois os seus contos, un a un. Devolvefalsepara calcular todos os contos coa páxina, como facían sempre as versións anteriores á 2.0.1. Por defecto:true.wp_sweep_capability(string$capability, string$context) — a capacidade requirida.$contexté un desweep,ajaxourest.wp_sweep_total_count(int$count, string$name) — o número total de filas respecto ao cal se mide a porcentaxe dunha limpeza.wp_sweep_count(int$count, string$name) — cantos elementos eliminaría unha limpeza.wp_sweep_details(array$details, string$name) — a lista de mostra que amosa Details.wp_sweep_sweep(string$message, string$name) — a mensaxe que se mostra despois de executar unha limpeza.
Accións
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.
Protexe claves de meta de entrada específicas para que non se limpen:
add_filter( 'wp_sweep_postmeta_whitelist', function ( $meta_keys ) {
$meta_keys[] = '_my_plugin_setting';
$meta_keys[] = '_acme_*';
return $meta_keys;
} );
Exclúe unha taxonomía adicional da limpeza de relacións de termos orfas:
add_filter( 'wp_sweep_excluded_taxonomies', function ( $taxonomies ) {
$taxonomies[] = 'product_type';
return $taxonomies;
} );
Capturas



Instalación
- Instala e activa o plugin. A pantalla aparece en
WP-Admin -> Ferramentas -> WP-Sweep. - Fai unha copia de seguranza da túa base de datos antes de limpar nada. Toda limpeza é irreversible e non hai desfacer.
Preguntas frecuentes
-
A pantalla Ferramentas -> Sweep ten un novo enderezo
-
Segue en Ferramentas, pero o enderezo cambiou de
tools.php?page=wp-sweep/admin.phpatools.php?page=wp-sweep. Actualiza os teus marcadores.O enderezo antigo era a forma herdada de «arquivo do plugin como slug do menú», que metía o nome do directorio de instalación do plugin na URL da páxina. Por iso a pantalla fallaba para quen instalaba WP-Sweep baixo outro nome de directorio — renomeado a man, ou descomprimido como
wp-sweep-2.0.0. Agora ningunha das dúas cousas ocorre. -
Onde foi Sweep All?
-
Cada fila ten unha caixa de verificación e a táboa ten unha acción en lote Sweep, así que marcar a caixa da cabeceira e aplicala fai o que facía Sweep All — e permíteche deixar fóra as que non queiras.
-
O meu fragmento de código que chama a WPSweep::get_instance() deixou de funcionar
-
As clases cambiaron de nome na 2.0.0:
WPSweepagora éWP_SweepWPSweep_Apiagora éWP_Sweep_APIWPSweep_Commandagora éWP_Sweep_Command
Así,
WPSweep::get_instance()->sweep( 'revisions' )pasa a serWP_Sweep::get_instance()->sweep( 'revisions' ). Non hai alias de compatibilidade, polo que o nome antigo provoca un erro fatal en vez de fallar en silencio.Todos os filtros e todas as accións
wp_sweep_admin_*_sweepmanteñen o nome que tiñan. -
Que filtros podo usar para protexer datos da limpeza?
-
Catro filtros por tipo reciben unha lista de claves meta que nunca se deben eliminar, e cada un admite
*como comodín:add_filter( 'wp_sweep_postmeta_whitelist', function ( $keys ) { $keys[] = '_my_plugin_setting'; $keys[] = '_acme_*'; return $keys; } );O mesmo aplícase a
wp_sweep_commentmeta_whitelist,wp_sweep_usermeta_whitelistewp_sweep_termmeta_whitelist. Os termos protéxense conwp_sweep_excluded_termids, e as taxonomías quedan fóra da limpeza de relacións de termos orfas conwp_sweep_excluded_taxonomies.Na 2.0.0 estas listas tamén protexen as limpezas de meta duplicada, algo que a documentación sempre dixo que facían e o código nunca fixo.
-
Unha clave que protexín foi limpada igualmente, ou conservouse moito de máis
-
Antes da 2.0.0 a exclusión era unha cláusula SQL
LIKE, eLIKEtrata un guion baixo como comodín dun só carácter. Un padrón de_my_keytamén coincidía conXmy!key, e con bastantes máis. Agora a coincidencia faise en PHP, así que un guion baixo é un guion baixo e só*é un comodín. Revisa a túa lista se dependías do comportamento antigo. -
Deixa WP-Sweep algo atrás cando o elimino?
-
Nada. WP-Sweep non garda filas de opcións, non crea táboas na base de datos, non rexistra capacidades nin programa eventos.
uninstall.phpexecútase igualmente e limpa todo nunha rede enteira en vez de só nos primeiros cen sitios.
Comentarios
Colaboradores e desenvolvedores
“WP-Sweep” é un software de código aberto. As seguintes persoas colaboraron con este plugin.
Colaboradores“WP-Sweep” foi traducido a 25 idiomas. Grazas aos desenvolvedores polas súas contribucións.
Traduce “WP-Sweep” ao teu idioma.
Interesado no desenvolvemento?
Revisa o código, bota unha ollada aorepositorio SVN, ou subscríbete ao log de desenvolvemento por RSS.
Rexistro de cambios
2.0.1
- NEW: Unha ligazón Sweep na fila do plugin na pantalla de Plugins, que abre Ferramentas -> Sweep.
- FIXED: A pantalla de Sweep esgotaba o tempo en bases de datos grandes. A 2.0.0 calculaba todos os contos antes de imprimir un só byte — e pedía o total de filas de cada táboa unha vez por fila en vez de unha soa, así que
SELECT COUNT(*)executábase catro veces por carga contra a táboa postmeta. Agora a pantalla móstrase ao momento e obtén os contos despois, unha petición cada vez, de modo que ningunha petición supera o límite de tempo de PHP. Sen JavaScript, unha ligazón calcúlaos coa páxina como sempre fixo a 2.0.0, e o novo filtrowp_sweep_defer_countsrestaura ese comportamento por completo. - FIXED: Contar as limpezas de meta duplicada obtiña en PHP os ids de todas as filas duplicadas mediante
GROUP_CONCAT, só para sumalos. Nunha táboa postmeta con millóns de duplicados isto só podía esgotar a petición. Agora o conto le só os totais por clave; os ids lense onde se necesitan, na limpeza que os elimina.
2.0.0
- FIXED: Termos sen usar lía «sen usar» na columna de conto, e o contador do propio núcleo conta entradas publicadas — así que un termo usado só por borradores, entradas pendentes, privadas ou na papeleira amosaba un conto de cero e eliminábase, levándose as súas relacións. Esas entradas volvían sen etiquetas e sen nada que dixese por que. Agora un termo ten que estar asociado a nada en absoluto
- FIXED: Limpar os termos dunha taxonomía que xa non rexistra nada rematou con
DELETE FROM wp_terms WHERE term_id NOT IN ( SELECT term_id FROM wp_term_taxonomy ), que son todas as filas soltas da táboa en vez das que a limpeza acababa de deixar orfas. Elimináronse con elas filas que a pantalla nin contara nin listara. Agora nomea os termos que deixou orfos - FIXED: Relacións de termos orfas decidía que unha fila era orfa buscando o seu
object_idenwp_posts— o que só fai a pregunta correcta cando a taxonomía pertence a entradas. Para unha taxonomía rexistrada para usuarios ou comentarios,object_idé un ID de usuario ou comentario, así que se eliminaba toda relación cuxo ID superase o das entradas mentres o usuario seguía aí.link_categoryexcluíase a man exactamente por este motivo; agora a exclusión dedúcese do que cada taxonomía ten rexistrado - FIXED: A limpeza de oEmbed coincidía con
%_oembed_%, e nun padrón LIKE un guion baixo coincide con calquera carácter único — así que significaba «calquera clave meta que conteña oembed cun carácter a cada lado», e era unha coincidencia de contido en vez de de prefixo. As claves doutros plugins eliminábanse definitivamente xunto coas cachés. WordPress escríbeas como_oembed_{hash}, así que agora o padrón ancórase ao principio cos seus guións baixos escapados - FIXED: A limpeza de oEmbed era a única limpeza de meta que nunca consultaba a lista de claves protexidas, así que unha clave que un sitio engadira expresamente a
wp_sweep_postmeta_whitelisteliminábase igualmente — a lista mesmo se lía para ela e despois ignorábase - FIXED: Optimizar a base de datos executaba
SHOW TABLESsen prefixo, que son todas as táboas do esquema. Nunha base de datos compartida entre instalacións — un aloxamento habitual — a vista de detalles listaba as táboas de todos os demais inquilinos, e a limpeza executabaOPTIMIZE TABLEen instalacións que este administrador non administra. Agora limítase ao prefixo desta instalación, conwp_sweep_optimize_tablespara un sitio que queira máis - BREAKING: Require WordPress 6.8 e PHP 8.2.
- BREAKING: A pantalla segue en Ferramentas pero o seu enderezo cambiou, de
tools.php?page=wp-sweep/admin.phpatools.php?page=wp-sweep. A forma antiga metía o nome do directorio de instalación na URL. - BREAKING: As clases cambiaron de nome:
WPSweep->WP_Sweep,WPSweep_Api->WP_Sweep_APIeWPSweep_Command->WP_Sweep_Command. Todos os filtros e accións manteñen o seu nome. - BREAKING:
WP_Sweep::$limit_detailsdesapareceu. Lémolo conlimit_details()e cámbiase co filtrowp_sweep_limit_details. - BREAKING: As seis accións
wp_sweep_admin_*_sweepexecútanse debaixo da táboa única de limpeza, na orde que sempre tiveron, en vez de debaixo de seis táboas separadas. - BREAKING: Sweep All desapareceu. Marca a caixa de verificación da cabeceira e aplica a acción en lote
Sweep, que fai o mesmo e permíteche deixar filas fóra. - NEW: Limpeza en lote. Marca as limpezas que queiras e execútaas de vez en vez de facer clic unha a unha.
- NEW: As limpezas agrúpanse na pantalla. A vista sen filtrar pon cada unha baixo un título cunha icona — Post, Comment, User, Term, Option, Database — e segue sendo unha soa táboa, así que unha única limpeza en lote aínda executa todo o que marques. Ordenar unha columna elimina os títulos en vez de deixalos describindo filas que xa non agrupan.
- NEW: Filtros de grupo e columnas ordenables, a partir dun
WP_List_Tablereal. - NEW: Toda a pantalla funciona con JavaScript desactivado. As accións das filas son ligazóns normais con nonce e a acción en lote é un envío de formulario normal.
- NEW: As listas de claves meta permitidas protexen tanto as limpezas de meta duplicada como as de orfa, algo que o readme sempre afirmou e o código nunca fixo.
- NEW: Filtros
wp_sweep_capabilityewp_sweep_limit_details. WP-Sweep non ten pantalla de axustes:wp_sweep_limit_detailsé como se cambia o límite de Details. - NEW: Cada limpeza inclúe unha descrición do que elimina, mostrada baixo o seu nome, e destácanse os contos que merecen actuación.
- NEW: Un
uninstall.phpque limpa nunha rede enteira en vez de só nos primeiros cen sitios. WP-Sweep non garda nada: nin filas de opcións, nin táboas, nin capacidades, nin eventos programados. - NEW: Reestruturado en
includes/, seguindo o Plugin Handbook. - NEW: Suites de PHPUnit e vitest, e CI de GitHub Actions en seis combinacións de WordPress e PHP, en sitio único e multisitio.
- CHANGED: As exclusións de claves meta compáranse en PHP en vez de con SQL
LIKE, así que un guion baixo nunha clave protexida é un guion baixo e non un comodín. - CHANGED: Todas as chamadas á base de datos pasan por un só método, e todas as consultas están preparadas.
- FIXED: Un XSS almacenado na pantalla de administración. A lista de Details construíase por concatenación de cadeas e inxectábase como HTML, así que un nome de autor de comentario con marcado executábase como script no navegador do administrador.
- FIXED: O plugin xa non constrúe rutas a partir do nome do seu propio directorio, así que o script de administración cárgase cando se instala baixo un directorio distinto de
wp-sweep. - FIXED: Filtrar
wp_sweep_excluded_termidscun array baleiro producía SQL non válido e deixaba en branco o conto de Termos sen usar. - FIXED: Un termo excluíase da limpeza de Termos sen usar sempre que o seu ID coincidise cunha opción
default_<taxonomy>, mesmo se esa opción apuntaba a un termo que xa non existe. WordPress inclúedefault_link_categoryco valor 2, así que na maioría dos sitios o termo que tiña o ID 2 non se limpaba en silencio. - FIXED: Limpar sen JavaScript eliminaba datos e non amosaba nada; agora móstrase o resultado.
- FIXED: O bucle de desinstalación en multisitio detíñase en 100 sitios, cargaba obxectos de sitio completos para ler unha soa columna e deixaba a pila de cambios desequilibrada nun.
- FIXED: Os parámetros da petición sanéanse e valídanse contra a lista de limpezas do propio plugin.
- FIXED: As dúas mensaxes «Sweep Complete» que imprime
wp sweeperan as únicas cadeas do plugin que nunca pasaban polas funcións de tradución
