V době kdy #tyden měl webovou verzi se na rychlofky.cz nashromáždilo dobrých 12 tisíc (velmi krátkých) příspěvků. Roky starých a také nenavštěvovaných, Google (vyhledávače) nemají rády krátké příspěvky a neumístí je do vyhledávání.
Z #tyden je navíc mezitím týdenní newsletter a web už dávno nemá smysl, takže jsem se konečně rozhoupal k tomu, že tu záplavu smetí (ano, dá se to tak nazvat) prostě smažu.
Jak tedy smazat velké množství příspěvků ve WordPressu?
Není to tak jednoduché a sám WordPress nemá žádnou cestu jak to udělat. V administraci jde mazat po dávkách (můžete si změnit počet zobrazených na víc než ten malý základ), ale budete narážet na kapacitu serveru, omezení PHP (paměť a doba běhu). A při 12 tisících to mazat po sto kusech dost dobře nejde.
![](https://365tipu.cz/wp-content/uploads/2025/02/Screenshot-2025-02-08-at-10.38.23-1024x343.jpg)
Komplikuje to i maličkost, že se mazané příspěvky pouze přemístí do Koše a pak ho budete muset vysypat – kde opět narazíte na omezení PHP a víc jak pár stovek se jich nepodaří smazat, prostě dorazí timeout.
Při mazání pozor i na používané cache, které je vhodné promazat ještě předtím, než začnete mazat. A pak finálně promazat poté co máte mazání hotovo.
Přes plugin
Jedno z vhodných řešení je některý z pluginu – třeba WP Bulk Delete nebo Bulk WP – tam můžete mazat třeba po 500 příspěvcích (to běžně omezená PHP dávají) a rovnou zaškrtnout, že má jít o trvalé smazání (na což fakt nezapomeňte).
![](https://365tipu.cz/wp-content/uploads/2025/02/Screenshot-2025-02-08-at-10.39.22-1024x368.jpg)
Výhoda cesty před plugin je, že zpravidla smažou i transients a různé další věci, které příspěvky mohou mít někde jinde.
Mažte pomalu, ty (například) dávky 500 smazaných neuspěchejte.
Přímo v SQL
Pokud máte přístup k něčemu jako SQL Admin, tak můžete mazat přímo v SQL. Stačí použít následující příkaz:
DELETE FROM wp_posts WHERE post_type = 'post';
Nezapomeňte ale, že tohle nesmaže ony související věci, takže to také musíte udělat ručně:
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);
DELETE FROM wp_term_relationships WHERE object_id NOT IN (SELECT ID FROM wp_posts);
Přes WP-CLI
Alternativa je využít WP-CLI, tedy možnost ovládat váš WordPress přes příkazovou řádku. Tady můžete použít
wp post delete $(wp post list --post_type=post --format=ids) --force
To –force je důležité, jinak mazané skončí opět v Koši.
Další tipy týkající se WordPressu
-
365 tipů. Co jeden den, to jeden tip. A spousta věci k vyzkoušení
Ne že bych neměl co dělat, ale prostě občas chcete něco zkusit. Podívat se jak se vyvinuly některé služby. Vidět je tak jak by je viděl někdo, kdo je nikdy nepoužil a…