Na dolgo delujočem spletnem mestu se lahko nabere tudi več deset tisoč neželenih komentarjev. Skrbniški vmesnik WordPress je udoben do nekaj tisoč vrstic, nad tem pa se zatakne. S spodnjimi koraki lahko tabele komentarjev spletnih mest na gostovanju cPanel varno počistiš in nastaviš, da se neželena pošta ne nabira znova.
Ukaze smo oktobra 2026 preizkusili na testnem računu cPanel aWh z WordPress 7.1.
1. Koliko je neželene pošte?
V skrbniškem vmesniku zavihki strani Komentarji (Čakajoči, Odobreni, Neželeni, Koš) pokažejo število. Isto lahko poizveš v phpMyAdmin (skupina Podatkovne baze v cPanelu) na zavihku SQL:
SELECT comment_approved, COUNT(*) AS db
FROM 1vL7334_comments
GROUP BY comment_approved;
Predpona tabel (v primeru 1vL7334_) je na spletnih mestih, nameščenih z WP Toolkit, naključna. Svojo izpiše ukaz wp db prefix ali jo vidiš na levem seznamu phpMyAdmin. Vrednosti stolpca comment_approved:
| Vrednost | Pomen | Ali je mogoče množično izbrisati? |
|---|---|---|
spam |
Označen kot neželen (zavihek Neželeni) | Da |
trash |
Postavljen v koš | Da |
0 |
Čaka na moderiranje (Čakajoči) | Ne, med njimi so lahko pravi komentarji |
1 |
Odobren, prikazan na strani | Ne |
post-trashed |
V koš je prišel skupaj s svojim prispevkom | Le skupaj s prispevkom |
2. Varnostna kopija
Vrstice, izbrisane s SQL, ni mogoče vrniti, zato najprej shrani podatkovno bazo, na zavihku Izvozi v phpMyAdmin ali z ukazom mysqldump. Uporabo ukaza brez gesla opisuje članek o uporabi WP-CLI.
cd ~/public_html
P=$(wp db prefix); DB=$(wp config get DB_NAME)
mysqldump --single-transaction --no-tablespaces "$DB" > ~/hozzaszolasok-elott-$(date +%F).sql
tail -1 ~/hozzaszolasok-elott-$(date +%F).sql
Zadnja vrstica naj bo -- Dump completed on ….
3. Izberi način brisanja
Malo neželene pošte: skrbniški vmesnik
Na zavihku Komentarji › Neželeni gumb Izprazni neželeno zadošča do nekaj tisoč vrstic. Po naših preizkusih je 1000 vrstic izbrisal v 8 sekundah, pri 20 000 vrsticah pa ni končal niti po štirih minutah in do takrat izbrisal le približno tretjino. Če se gumb ustavi z iztekom časa, nanj ne klikaj znova, temveč uporabi enega od spodnjih načinov.
Veliko neželene pošte, s SSH: WP-CLI
Na paketih z dostopom SSH (cP Premium, cP Pro, cP Pro 100) je WP-CLI najudobnejši, ker s komentarji izbriše tudi pripadajoče metapodatke. Delaj v majhnih odmerkih, s premori:
cd ~/public_html
while IDS=$(wp comment list --status=spam --number=500 --format=ids) && [ -n "$IDS" ]; do
wp comment delete $IDS --force | tail -1
sleep 1
done
--force preskoči koš. Za komentarje v košu zaženi isto zanko s stikalom --status=trash.
Zelo veliko neželene pošte: SQL v odmerkih
Pri več deset tisoč vrsticah je SQL najhitrejši: v naših preizkusih se je 13 000 vrstic izbrisalo v treh sekundah.
while :; do
N=$(mysql "$DB" -N -e "DELETE FROM ${P}comments WHERE comment_approved = 'spam' LIMIT 5000; SELECT ROW_COUNT();")
echo "izbrisano: $N"
[ "$N" -eq 0 ] && break
sleep 1
done
Brez SSH to zaženi na zavihku SQL v phpMyAdmin, s svojo predpono tabel, in ponavljaj, dokler število prizadetih vrstic ne pade na nič:
DELETE FROM 1vL7334_comments WHERE comment_approved = 'spam' LIMIT 5000;
Brisanje s SQL ne zadene tabele commentmeta, zato sledi naslednji korak.
4. Brisanje osirotelih metapodatkov
Vtičniki za filtriranje neželene pošte za vsak komentar zapišejo podatke v tabelo commentmeta. Če si komentarje izbrisal s SQL, te vrstice ostanejo. V našem preizkusu je po 13 000 izbrisanih komentarjih ostalo 13 000 osirotelih vrstic. Njihovo število:
SELECT COUNT(*)
FROM 1vL7334_commentmeta cm
LEFT JOIN 1vL7334_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;
Njihov izbris:
DELETE cm FROM 1vL7334_commentmeta cm
LEFT JOIN 1vL7334_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;
Če si brisal z WP-CLI, lahko ta korak izpustiš, preverjalno poizvedbo pa je dobro zagnati.
5. Neželena pošta, ki je prešla filter
Neželeni komentarji, ki jih filter ni prepoznal, so na strani vidni kot odobreni komentarji. Najdeš jih po navedenem spletnem naslovu ali pošiljatelju. Najprej vedno s SELECT poglej, kaj bi poizvedba našla:
SELECT comment_ID, comment_author, comment_author_url, comment_content
FROM 1vL7334_comments
WHERE comment_approved = '1'
AND comment_author_url LIKE '%gyanus-oldal.hu%';
Ponavljajoče se pošiljatelje poiščeš takole:
SELECT comment_author_email, comment_author_IP, COUNT(*) AS db
FROM 1vL7334_comments
GROUP BY comment_author_email, comment_author_IP
HAVING db > 5
ORDER BY db DESC;
Če so zadetki res neželeni, jih označi v skrbniškem vmesniku ali zaženi poizvedbo v obliki DELETE FROM 1vL7334_comments WHERE …. Po slednji opravi 4. in 6. korak.
6. Popravek števila komentarjev
WordPress število komentarjev za vsak prispevek hrani posebej. Brisanje neželene pošte in koša ga ne spremeni, le brisanje odobrenih komentarjev s SQL. Če je na strani vidno napačno število:
wp comment recount $(wp post list --post_type=any --format=ids)
Ukazu wp comment recount je treba navesti identifikatorje prispevkov, brez njih izpiše le svojo uporabo. Brez SSH v phpMyAdmin:
UPDATE 1vL7334_posts p
SET p.comment_count = (
SELECT COUNT(*) FROM 1vL7334_comments c
WHERE c.comment_post_ID = p.ID AND c.comment_approved = '1'
)
WHERE p.post_type IN ('post', 'page');
7. Stiskanje tabel
Prostor izbrisanih vrstic se znotraj tabel sprosti, datoteke na disku pa ne postanejo manjše, dokler tabel ne zgradiš znova:
OPTIMIZE TABLE 1vL7334_comments, 1vL7334_commentmeta;
Opomba Table does not support optimize, doing recreate + analyze instead je normalna, bistveno je stanje OK v zadnji vrstici. Operacija za nekaj časa zaklene tabele, zato jo zaženi v obdobju z malo prometa. Če spletno mesto uporablja objektni predpomnilnik (na primer Redis), ga tudi izprazni.
Kako to preprečiš?
Na strani Nastavitve › Razprava:
- Preden se prikaže komentar: vklopi nastavitev Komentar mora biti ročno odobren ali vsaj avtor komentarja mora imeti predhodno odobren komentar. Tako se komentarji robotov ne prikažejo na strani.
- Druge nastavitve komentarjev: Samodejno zapri komentarje pri starih prispevkih odpravi velik del tarč neželene pošte. Za komentiranje morajo biti uporabniki registrirani in prijavljeni je še strožje.
- Moderiranje komentarjev: ponavljajoče se izraze in naslove lahko dodaš v polje Nedovoljeni ključi komentarjev.
- Če komentarjev ne potrebuješ: izklopi nastavitev Dovoli komentiranje novih prispevkov. To velja le za nove prispevke, stare je treba zapreti posebej.
Ročno moderiranje neželene pošte ne ustavi, le skrije jo, zato je dobro uporabljati tudi vtičnik za filtriranje neželene pošte. Akismet, ki pride z WordPressom, zahteva ključ API in podatke komentarjev pošilja zunanji storitvi v analizo, kar je treba navesti v obvestilu o varstvu podatkov. Zahteve robotov obremenjujejo gostovanje, tudi če se njihov komentar ne prikaže: če z enega naslova prihajajo množično, blokiraj naslov IP.
O nadaljnjem čiščenju podatkovne baze govorijo članka o napihnjeni tabeli wp_postmeta in o samodejno naloženih podatkih wp_options ter naš blogovski zapis o optimizaciji podatkovne baze WordPress.