WordPress’in en güzel yanlarından biri, kodlama bilginiz olmasa bile dakikalar içinde modern ve işlevsel bir web sitesi kurmanıza olanak tanıması. Bununla birlikte, işler biraz daha ileri seviyeye taşındığında, WordPress’in arka planında manuel ayarlara müdahale edebilme esnekliği de sunması büyük avantaj. Özellikle büyük bir site yönetiyorsanız, bazı işlemleri phpMyAdmin veya doğrudan SQL komutlarıyla yapmak işleri ciddi anlamda hızlandırabilir. Ve biz bu yazıda SQL sorguları yardımıyla bazı işlemlerin nasıl kolayca yapılacağını göstereceğiz…
phpMyAdmin ile SQL Sorguları Ekleme
WordPress, veritabanı yönetim sistemi olarak MySQL kullanır. MySQL için çeşitli grafik kullanıcı arayüzleri vardır, ancak en popüler olanı phpMyAdmin‘dir. PhpMyAdmin’e genellikle hosting yönetici panelinizden ya da cPanel üzerinden erişebilirsiniz.
- cPanel’e girdikten sonra Veritanları bölümünün altındaki phpMyAdmin‘e tıklayın.

- Otomatik olarak phpMyAdmin sayfasına yönlendirileceksiniz. Açılan sayfanın sol tarafında sunucunuzdaki tüm siteler için bir adet veritabanı göreceksiniz.
Başlamadan önce mutlaka veritabanı yedeği alın! Yedek almak için aşağıdaki yolu izleyin:
- phpMyAdmin’de Üzerinde çalışmak istediğiniz siteye ait veritabanına tıklayın.
- Üst kısmdaki Dışa Aktar‘a tıklayın.
- Dışa aktarma yöntemi olarak ‘Hızlı‘yı seçin.
- Uzantı olarak SQL‘i seçin.
- Son olarak Git’e tıklayın.

- Veritabanı yedeğiniz bilgisayarınıza inmeye başlayacak. Eğer yedekten geri yüklemeniz gerekiyorsa, “İçe Aktar” sekmesine gidin, yedekleme dosyanızı seçin ve Git’i tıklayın.
WordPress için Faydalı SQL Komutları
SQL sorguları kullanarak, veritabanının herhangi bir tablosundaki herhangi bir alanı görüntüleyebilir veya düzenleyebilirsiniz. Ayrıca, gerekirse veri ekleyebilir, silebilir ve tablolar oluşturabilirsiniz. phpMyAdmin’de üst kısımda bulunan SQL sekmesine tıkladığınızda, komut satırlarını ekleyebileceğiniz bir metin kutusu açılacak. WordPress için SQL sorguları ekleyeceğimiz yer tam olarak burası. Manuel SQL komutlarıyla yapabileceğiniz gerçekten çok faydalı şeyler var.
📌 Veritabanı tablolarınızın wp_ önekinden farklı bir öneki olabilir. Bu yüzden aşağıdaki komutları girerken “wp_” önekini kendinizinkiyle değiştirmeyi unutmayın!
1. SQL Komutuyla WordPress Şifresini Değiştirme
UPDATE wp_users SET user_pass = MD5( '[yeni_sifre]' ) WHERE user_login = '[kullanıcıadı]';
2. WordPress Kullanıcı Adını Değiştirme
UPDATE wp_users SET user_login = 'yenikullanıcıadı' WHERE user_login = 'eskikullanıcıadı';
3. Gönderileri Yeni Kullanıcıya Aktarma
UPDATE
wp_posts
SET
post_author = (SELECT ID FROM wp_users WHERE user_login = '[new_author_login]')
WHERE
post_author = (SELECT ID FROM wp_users WHERE user_login = '[old_author_login]');
4. SQL Sorgusuyla Spam Yorumları Toplu Silme
Tüm spam yorumları tek seferde silmek için aşağıdaki SQL sorgusunu kullanın:
DELETE FROM wp_comments WHERE comment_approved = "spam";
5. Onay Bekleyen Yorumları Toplu Silme
DELETE FROM wp_comments WHERE comment_approved = "0";
6. Belirli bir url’den gelen tüm spam yorumları kaldırma
DELETE from wp_comments WHERE comment_author_url LIKE "%spamurl%" ;
7. Eski Gönderiler için Yorumları Devre Dışı Bırakma
UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2020-01-01' AND post_status = 'publish';
8. Tüm Gönderilerdeki Yorumları Devre Dışı Bırakma
UPDATE wp_posts SET comment_status = 'closed' where post_type ='post';
9. WordPress Pingback’leri Devre Dışı Bırakma
- Tüm kullanıcılar için pingback’leri devre dışı bırakmak için şu SQL sorgusunu kullanın:
UPDATE wp_posts SET ping_status = 'closed';
10. İstenmeyen Kısa Kodları Kaldırma
UPDATE wp_post SET post_content = replace(post_content, '[notusedcode]', '' ) ;
- “notusedcode” yerine kaldırmak istediğiniz kısa kodu ekleyin.
11. Gönderi Revizyonlarını Toplu Olarak Silme
WordPress her yazı kaydında otomatik olarak revizyon oluşturur. Bu sürümler zamanla veritabanını şişirebilir. Özellikle büyük sitelerde revizyonları silmek ciddi performans iyileştirmesi sağlar:
DELETE FROM wp_posts WHERE post_type = "revision";
12. SQL Sorgusu ile Eklentileri Toplu Olarak Devre Dışı Bırakma
UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';
13. WordPress Görsellerinin URL’sini Değiştirme
UPDATE wp_posts SET post_content = REPLACE (post_content, 'src="https://www.eskiurl.com', 'src="https://www.yeniurl.com');
14. Alan Adı Değişikliğinden Sonra Bağlantıları Güncelleme
Alan adı değişikliği yaptıktan sonra tüm eski bağlantıları yenisiyle değiştirmeniz gerekir. Bunun için aşağıdaki SQL sorgusunu kullanabilirsiniz:
UPDATE wp_posts SET post_content = REPLACE (post_content, '[eski_domain]', '[yeni_domain]');
15. WordPress Gönderilerini Sayfalara Çevirme
UPDATE wp_posts SET post_type = 'page' WHERE post_type = 'post';
- Ayrıca bir yazıyı sayfaya da çevirebilirsiniz:
UPDATE wp_posts SET post_type = 'post' WHERE post_type = 'page';
16. Kullanılmayan Etiketleri Tanımlama
SELECT * From wp_terms wt
INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0;
17. Kullanılmayan Etiketleri Temizleme
Boş kalan, yani hiçbir yazıyla ilişkili olmayan etiketleri silmek için aşağıdaki koutu kullanın. Bu komutla, gereksiz etiket çöplüğünden kurtulursunuz:
DELETE FROM wp_terms
WHERE term_id IN (
SELECT t.term_id
FROM wp_terms t
LEFT JOIN wp_term_taxonomy tt ON tt.term_id = t.term_id
WHERE tt.count = 0 AND tt.taxonomy = 'post_tag'
);
18. Çöp Kutusunu Boşaltma
Çöp kutusuna gönderilen ama hâlâ veritabanınızda yer kaplayan yazılardan kurtulun:
DELETE FROM 'wp_posts' WHERE 'post_status'="trash"
19. Tüm oEmbed Önbelleğini Silme
DELETE FROM 'wp_posts' WHERE 'post_type'="oembed_cache"
20. Tüm Kullanıcı Şifrelerini Sıfırlama
Özellikle bir güvenlik ihlali yaşadıysanız, tüm kullanıcıların şifresini sıfırlamak gerekebilir. Aşağıdaki örnek, sadece kullanıcı ID’si 1 olan admin hesabının şifresini değiştirir. Tüm kullanıcıların şifresini değiştirmek için WHERE koşulunu kaldırabilirsiniz ama dikkatli olun!
UPDATE wp_users SET user_pass = MD5('yeni_sifre') WHERE ID = 1;
21. Yazı Yazarlarını Toplu Olarak Değiştirme
Yazar değişikliği yapmanız gerekiyorsa, örneğin yazar ID’si 2 olan yazıların yazarını 1 olarak değiştirmek için şu komutu girin:
UPDATE wp_posts SET post_author = 1 WHERE post_author = 2;
22. Veritabanını Optimize Etme (Hızlandırma)
Zamanla şişen veritabanını optimize etmek, performans açısından faydalıdır:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_comments, wp_commentmeta, wp_terms, wp_term_taxonomy, wp_term_relationships;
- Tüm tabloları optimize etmek isterseniz:
OPTIMIZE TABLE tabloadı1, tabloadı2, ...şeklinde devam edin.
23. Yazılardaki Belirli Bir Kelimeyi Toplu Olarak Değiştirme
UPDATE wp_posts SET post_content = REPLACE(post_content, 'eski-kelime', 'yeni-kelime');
24. Kategorisiz Tüm Yazıları Listeleme
Yazıların kategorisiz kalması hem kullanıcı hem de SEO açısından sıkıntılı olabilir. Bunları tespit etmek için:
SELECT * FROM wp_posts
WHERE ID NOT IN (
SELECT object_id FROM wp_term_relationships
);
25. Tüm Pingback ve Trackback’leri Silme
WordPress, varsayılan olarak pingback ve trackback’leri yorum gibi saklar. Bunlar genellikle spam niteliğindedir:
DELETE FROM wp_comments WHERE comment_type = 'pingback' OR comment_type = 'trackback';
26. Belirli Bir Tarihten Önceki Yazıları Silme
Örneğin, 2022 yılından önceki tüm yazıları topluca silmek istiyorsanız:
DELETE FROM wp_posts WHERE post_date < '2022-01-01' AND post_type = 'post';
27. Kullanılmayan Meta Verilerini Silme
Bu komut, yazısı silinmiş ama meta verisi kalmış satırları temizler:
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;
28. Belirli E-posta ile Kayıtlı Kullanıcıları Listeleme
Örneğin, Gmail kullanan kullanıcıları görmek için:
SELECT * FROM wp_users WHERE user_email LIKE '%@gmail.com';
29. Belirli Bir Etiketin Tüm Yazılarını Silme
Örneğin etiket-adi etiketine sahip tüm yazıları kaldırmak için:
DELETE p FROM wp_posts p
INNER JOIN wp_term_relationships tr ON (p.ID = tr.object_id)
INNER JOIN wp_term_taxonomy tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)
INNER JOIN wp_terms t ON (tt.term_id = t.term_id)
WHERE tt.taxonomy = 'post_tag' AND t.slug = 'etiket-adi';
30. Kırık Medya Eklerini Silme (Dosyası Olmayanlar)
Eğer wp_posts tablosundaki ek dosyaların fiziksel karşılığı yoksa (örneğin dosya FTP’den silindiyse) aşağıdaki sorguyu kullanın. Silmeden önce kontrol için sadece listeleme yapılır. Sonrasında silmek isterseniz DELETE ile değiştirebilirsiniz:
SELECT ID, guid FROM wp_posts WHERE post_type = 'attachment' AND guid NOT LIKE '%.jpg%' AND guid NOT LIKE '%.png%' AND guid NOT LIKE '%.pdf%';
31. Site Taşıma Sonrası URL Güncelleme
UPDATE wp_options SET option_value = REPLACE(option_value, 'https://eskisite.com', 'https://yenisite.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = REPLACE(guid, 'https://eskisite.com','https://yenisite.com');
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://eskisite.com', 'https://yenisite.com');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value,'https://eskisite.com','https://yenisite.com');
32. Bir Kategorideki Yazıları Başka Kategoriye Taşıma
UPDATE wp_term_relationships
SET term_taxonomy_id = (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id = [yeni_kategori_id])
WHERE term_taxonomy_id = (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id = [eski_kategori_id]);
33. Son 30 Günde Eklenen Yazıları Görüntüleme
SELECT ID, post_title, post_date
FROM wp_posts
WHERE post_type = 'post' AND post_status = 'publish'
AND post_date >= NOW() - INTERVAL 30 DAY;
34. Aynı Başlığa Sahip Yazıları Bulma
SELECT post_title, COUNT(*) c
FROM wp_posts
GROUP BY post_title
HAVING c > 1;
35. Yorum Yapanların IP Adreslerini Listeleme
SELECT comment_author, comment_author_IP FROM wp_comments GROUP BY comment_author_IP;
36. En Çok Sipariş Veren Müşterileri Listeleme
SELECT um.meta_value AS email, COUNT(p.ID) AS order_count
FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
JOIN wp_usermeta um ON pm.meta_value = um.user_id
WHERE p.post_type = 'shop_order'
AND pm.meta_key = '_customer_user'
AND p.post_status IN ('wc-completed', 'wc-processing')
AND um.meta_key = 'billing_email'
GROUP BY um.meta_value
ORDER BY order_count DESC
LIMIT 10;
37. Stok Durumu “Stokta Yok” Olan Ürünleri Listeleme
SELECT p.ID, p.post_title
FROM wp_posts p
JOIN wp_postmeta pm ON p.ID = pm.post_id
WHERE pm.meta_key = '_stock_status' AND pm.meta_value = 'outofstock';
38. Satılmamış Ürünleri Listeleme
WooCommerce bu veriyi doğrudan tutmaz ama ipucu olarak son 30 gün içinde hiç sipariş verilmeyen ürünler şöyle tespit edilebilir:
SELECT p.ID, p.post_title
FROM wp_posts p
WHERE p.post_type = 'product'
AND p.ID NOT IN (
SELECT pm.meta_value
FROM wp_postmeta pm
WHERE pm.meta_key = '_product_id'
)
AND p.post_status = 'publish';
39. WooCommerce Sipariş Notlarını Silme
DELETE FROM wp_comments
WHERE comment_type = 'order_note';
40. Belirli Bir Müşterinin Tüm Siparişlerini Listeleme
SELECT ID, post_date, post_status
FROM wp_posts
WHERE post_type = 'shop_order' AND post_author = [kullanici_id];
WordPress veritabanını iyi kavramak ve nasıl çalıştığını anlamak, kendi siteniz üzerinde size daha fazla kontrol sağlar ve çok sayıda eklenti yükleme ihtiyacını da ortadan kaldırır. Bununla birlikte, yukarıdaki komutlar doğrudan veritabanına müdahale ettiği için dikkatli ve bilinçli kullanılmalıdır. Yanlış bir komut, tüm site verini silebileceği için yedek almadan hiçbir SQL sorgusunu çalıştırılmamalıdır. Yani her zaman önce veritabanınızı yedekleyin ve mümkünse sorguları önce staging (test) ortamında deneyin.
