WordPress için çok faydalı SQL sorguları

wordpress — 7 Haziran 2014 — Murat SELÇUK
WordPress en popüler içerik yönetim sistemlerinden birisi benim şahsi görüşüm olarak en iyisi diyebilirim.
Aslında bir çok işlevi yönetim panelinden yapabiliyorsunuz. Fakat bazen bir siteyi taşırken, site adresini değiştirirken veya site üzerinden toplu değişiklikler yapmak istediğimizde bunu SQL sorgusu ile hızlı bir şekilde yapmak isteyebiliriz.
Aşağıdaki SQL sorguları ile işleri biraz kolaylaştırabilirsiniz.<!--more-->
<span style="color: #ff0000;"><strong>Başlamadan Önce!</strong></span>
Site veri tabanında bir değişiklik yapmadan önce yedek almak hayat kurtarıcı olabilir. veri tabanı yedeğinizi phpMyAdmin yönetim panelinden alabileceğiniz gibi bunu WordPress eklentileri ile de halledebilirsiniz. <a title="WP-DB-Backup" href="http://wordpress.org/plugins/wp-db-backup/" target="_blank">WP-DB-Backup</a> eklentisi ile kolay bir şekilde WorsPress veri tabanındaki istediğiniz tabloların yedeğiniz alabilirsiniz.
Bu eklentinin yanı sıra <a title="WP-DBManager" href="http://wordpress.org/plugins/wp-dbmanager/" target="_blank">WP-DBManager</a> eklentisi ile veri tabanını optimize edebilir,veri tabanındaki hataları düzeltebilir, veri tabanı yedekleme, geri yükleme, tablo silme ve sorgu gibi işlemlerini gerçekleştirebilir, yedek alma işini belirli zaman aralıklarında otomatik olarak çalışacak şekilde programlayabilirsiniz.
Ben genelde sorguları phpMyAdmin paneli üzerinden gerçekleştiriyorum.
<em>Veri tabanı nedir? Sorusuna verecek cevabınız yoksa ve kullandığınız WordPress sitenizi kendiniz kurmadıysanız ve bu tür kodlar hakkında hiçbir fikriniz yoksa burada yazanları evde denemeyin.</em>
<h2>WordPress veri tabanı için kullanışlı SQL sorguları</h2> Daha önceden de söylediğim gibi ben sorguları phpMyAdmin üzerinden gerçekleştiriyorum. Eğer sizin bir phpMyAdmin paneliniz yoksa yada bu panele erişim yetkiniz yoksa bu sorguları <a title="WordPress SQL Executioner" href="http://justinsomnia.org/2008/02/the-wordpress-sql-executioner/" target="_blank">WordPress SQL Executioner</a> isimi WordPress eklentisini kullanarak da gerçekleştirebilirsiniz. <ul> <li><a title="site URL ve home URL bağlantılarının güncellenmesi" href="#site URL ve home URL bağlantılarının güncellenmesi">Site URL ve home URL bağlantılarının güncellenmesi</a></li> <li><a title="GUID değerinin güncellenmesi" href="#GUID değerinin güncellenmesi">GUID değerinin güncellenmesi</a></li> <li><a title="Site içeriklerinde bulunan URL bağlantılarının güncellenmesi" href="#Site içeriklerinde bulunan URL bağlantılarının güncellenmesi">Site içeriklerinde bulunan URL bağlantılarının güncellenmesi</a></li> <li><a title="Sadece Görsel öğelerin bağlantı yolunu değiştirme" href="#Sadece Görsel öğelerin bağlantı yolunu değiştirme">Sadece Görsel öğelerin bağlantı yolunu değiştirme</a></li> <li><a title="Sadece Görsel öğelerin bağlantı yolunu değiştirme" href="#Sadece Görsel öğelerin bağlantı yolunu değiştirme">Yazılarınızın meta bilgisini güncellenmesi</a></li> <li><a title="Varsayılan kullanıcı adının “admin” değiştirilmesi" href="#Varsayılan kullanıcı adının “admin” değiştirilmesi" target="_blank">Varsayılan kullanıcı adının “admin” değiştirilmesi</a></li> <li><a title="WordPress şifresinin değiştirilmesi" href="#WordPress şifresinin değiştirilmesi">WordPress şifresinin değiştirilmesi</a></li> <li><a title="Yazıların bir yazardan başka bir yazara atanması" href="#Yazıların bir yazardan başka bir yazara atanması">Yazıların bir yazardan başka bir yazara atanması</a></li> <li><a title="Sürümlerin silinmesi" href="#Sürümlerin silinmesi">Sürümlerin silinmesi</a></li> <li><a title="Yazıların meta bilgilerinin silinmesi" href="#Yazıların meta bilgilerinin silinmesi">Yazıların meta bilgilerinin silinmesi</a></li> <li><a title="Yorumlarda bulunan bütün e-posta adreslerinin toplanması" href="#Yorumlarda bulunan bütün e-posta adreslerinin toplanması">Yorumlarda bulunan bütün e-posta adreslerinin toplanması</a></li> <li><a title="Bütün geri izlemelerin silinmesi (pingbacks)" href="#Bütün geri izlemelerin silinmesi (pingbacks)">Bütün geri izlemelerin silinmesi (pingbacks)</a></li> <li><a title="Bütün spam yorumların silinmesi" href="#Bütün spam yorumların silinmesi">Bütün spam yorumların silinmesi</a></li> <li><a title="Kullanılmayan bütün yorumların silinmesi" href="#Kullanılmayan bütün yorumların silinmesi">Kullanılmayan bütün yorumların silinmesi</a></li> <li><a title="Kaç tane spam yorum olduğunun bulunması" href="#Kaç tane spam yorum olduğunun bulunması">Kaç tane spam yorum olduğunun bulunması</a></li> <li><a title="En fazla spam yorum alan yazıların bulunması" href="#En fazla spam yorum alan yazıların bulunması">En fazla spam yorum alan yazıların bulunması</a></li> <li><a title="Spam yorumların daha çok hangi ip adreslerinden geldiğinin bulunması" href="#Spam yorumların daha çok hangi ip adreslerinden geldiğinin bulunması">Spam yorumların daha çok hangi ip adreslerinden geldiğinin bulunması</a></li> </ul> <a name="site URL ve home URL bağlantılarının güncellenmesi"></a>
<h3>Site URL ve home URL bağlantılarının güncellenmesi</h3> WordPress'i ilk kurduğunuzda site adresiniz "site URL" ve "home URL" olarak iki ayrı alanda saklanmaktadır. Sitenizi taşıdığınızda ve alan adınızı değiştirdiğinizde bu verileri değiştirmezseniz sayfanız düzgün çalışmayacaktır. veri tabanı üzerinden eski site adresinizi yeni site adresiniz ile değiştirebilirsiniz. <blockquote>UPDATE wp_options SET option_value = replace(option_value, 'http://www.eskisiteurl.com', 'http://www.yenisiteurl.com') WHERE option_name = 'home' OR option_name = 'siteurl';</blockquote> <a name="GUID değerinin güncellenmesi"></a> <h3>GUID değerinin güncellenmesi</h3> Sitenizi başka bir alan adına taşıdıktan sonra yapmanız gereken hayati öneme sahip değişikliklerden birisi de GUID verisini değiştirmek olmalıdır. Sayfaların ve yazıların URL yapısının düzgün olarak çalışabilmesi için GUID değerini yeni site adresi ile değiştirmelisiniz. <blockquote>UPDATE wp_posts SET guid = REPLACE (guid, 'http://www.eskisiteurl.com', 'http://www.yenisiteurl.com');</blockquote> <a name="Site içeriklerinde bulunan URL bağlantılarının güncellenmesi"></a> <h3>Site içeriklerinde bulunan URL bağlantılarının güncellenmesi</h3> Bir siteyi başka bir alan adına taşıdığınızda bütün sayfa ve yazılarınızda bulunan içeriklerde gömülü medyaları ve site içi linklerinizi de değiştirmeniz gerekir. Bunu yönetim panelinden yapmaya kalkarsanız binlerce içeriği bulunan bir siteniz için günlerce uğraşmanız gerekebilir. Bu işlemi SQL sorgusu yardımıyla hızlı ve kolay bir şekilde halledebilirsiniz. <blockquote> UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://www.eskisiteurl.com', 'http://www.yenisiteurl.com');</blockquote> <a name="Sadece Görsel öğelerin bağlantı yolunu değiştirme"></a> <h3>Sadece Görsel öğelerin bağlantı yolunu değiştirme</h3> CDN kullanıyorsanız veya görsellerinizi Amazon CloudFront gibi bir altyapı ile saklıyorsanız. Görsel dosyalarınızı yolunu kendi sunucunuz yerine kullandığınız servis sunucu adresi ile değiştirmek için aşağıdaki sorgu ile sadece görseller için 'src' etiketi ile oluşturulmuş bağlantıları değiştireblirsiniz. <blockquote> UPDATE wp_posts SET post_content = REPLACE (post_content, 'src="http://www.eskisiteurl.com', 'src="http://yourcdn.yenisiteurl.com');</blockquote> <a name="Yazılarınızın meta bilgisini güncellenmesi"></a> <h3>Yazılarınızın meta bilgisini güncellenmesi</h3> WordPress yazılarla ilgili özel bilgileri ayrı bir veri tabanında saklar. WordPress sitenizi başka bir alan adına taşıdığınızda bu bilgileri de değiştirmeniz gerekmektedir. Aşağıdaki sorgu ile bu alandaki site adresini kolayca değiştirebilirsiniz. <blockquote>UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://www.eskisiteurl.com','http://www.yenisiteurl.com');</blockquote> <a name="Varsayılan kullanıcı adının “admin” değiştirilmesi"></a> <h3>Varsayılan kullanıcı adının “admin” değiştirilmesi</h3> WordPress bir siteyi kurduğunuzda varsayılan yönetici kullanıcı adı 'admin' olarak oluşturulmaktadır. Bu herkes tarafından bilinen bir bilgidir. Bu nedenle güvenlik riski taşıdığı için bunu değiştirmeniz siteniz için faydalıdır. Bu değişikliği yönetim paneli üzerinden yapamazsınız. Aşağıdaki SQL sorgusu ile kolayca değiştirebilirsiniz. <blockquote>UPDATE wp_users SET user_login = 'Yeni-kullanici-adi' WHERE user_login = 'Admin';</blockquote> <a name="WordPress şifresinin değiştirilmesi"></a> <h3>WordPress şifresinin değiştirilmesi</h3> WordPress şifrenizi unuttuysanız ve sunucunuz mail gönderme özelliği kapalı ise veya kullanıcı adına bağlı e-posta adresiniz kullanılmıyor ise şifreyi değiştirmek için tek yolunuz bu değişikliği veri tabanı üzerinden yapmaktır. Aşağıdaki SQL sorgusu ile şifrenizi basit bir şekilde değiştirebilirsiniz. <blockquote>UPDATE wp_users SET user_pass = MD5( 'yeni-sifre' ) WHERE user_login = 'kullanici-adi';</blockquote> <a name="Yazıların bir yazardan başka bir yazara atanması"></a> <h3>Yazıların bir yazardan başka bir yazara atanması</h3> Bir yazara ait yazılara başka bir yazara aktarmak isteyebilirsiniz. Bu can sıkıcı ve zaman alıcı bir iştir. Yazı miktarının çok fazla olduğu zaman bunu yönetim panelinden yapmanız zor olabilir. Bunu SQL ile kolay ve hızlı bir biçimde halledebilirsiniz. Öncelikle aktaracağınız ve aktarılan yazarın ID numarasına ihtiyacınız var. Bunu yönetim panelinizden kullanıcı profilinizi açtığınızda tarayıcının adres çubuğunda “user_id” nin yanında yazan sayıdan öğrenebilirsiniz. <blockquote>UPDATE wp_posts SET post_author = 'yeni-yazar-id' WHERE post_author = 'eski-yazar-id';</blockquote> <a name="Sürümlerin silinmesi"></a> <h3>Sürümlerin silinmesi</h3> WordPress sayfa ve yazılarında değişiklik yaptığınızda bunu farklı bir sürüm olarak kaydediyor. Bir hata yaptığınızda eski bir sürüme geri dönüş yapabiliyorsunuz. Fakat binlerce yazı ve sayfanızın olduğu bir sitede onbinlerce sürüm kaydına sahip olabilirsiniz. Bu veri tabanı dosyanızın büyümesine ve sayfa yüklenme hızınızın yükselmesine sebep olabilir. veri tabanınızı optimize etmek adına eğer ihtiyacınız yoksa bütün eski sürümleri tek seferde silebilirsiniz. Bütün sürümler meta bilgileri ile birlikte silinecektir. <blockquote>DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision'</blockquote> <a name="Yazıların meta bilgilerinin silinmesi"></a> <h3>Yazıların meta bilgilerinin silinmesi</h3> WordPress site sahipleri sürekli eklenti kurup kaldırırlar. Bazı eklentiler veri tabanına eklenti ile ilgili bazı meta verileri kaydederler. Eklentiyi kaldırdıktan sonra da bu veriler veri tabanınızda 'post_meta' tablosunda durmaya devam eder. Kullanılmayan meta verilerini veri tabanınızdan silerseniz hem veri tabanı boyutunu düşürürsünüz hem de sitenize biraz hız katabilirsiniz. <blockquote>DELETE FROM wp_postmeta WHERE meta_key = 'your-meta-key';</blockquote> <a name="Yorumlarda bulunan bütün e-posta adreslerinin toplanması"></a> <h3>Yorumlarda bulunan bütün e-posta adreslerinin toplanması</h3> Sitenizin açıldığı günden bugüne aldığı bütün yorum yazan kişilerin e-posta adreslerini toplamak isterseniz bunu sql sorgusu ile halledebilirsiniz. Bu toplama sırasında aynı e-posta adreslerini görmezden gelerek birden fazla yorum yazan kişilerin e-posta adresleri tekrar kayıt oluşturmadan toplayabilirsiniz. <blockquote>SELECT DISTINCT comment_author_email FROM wp_comments;</blockquote> <a name="Bütün geri izlemelerin silinmesi (pingbacks)"></a> <h3>Bütün geri izlemelerin silinmesi (pingbacks)</h3> Popüler yazılarınız yüzlerce geri izleme alabilir. Bu veri tabanı boyutunuzu arttırabilir. Bütün geri izlemeleri silmek için aşağıdaki komutu kullanabilirsiniz. <blockquote>DELETE FROM wp_comments WHERE comment_type = 'pingback';</blockquote> <a name="Bütün spam yorumların silinmesi"></a> <h3>Bütün spam yorumların silinmesi</h3> Bolca spam yorum alıyorsanız bunları silmek işkenceye dönüşebilir. Aşağıdaki SQL komutu ile bütün spam yorumları tek seferde silebilirsiniz. İsterseniz aşağıdaki parametreyi değiştirerek bütün yorumlarınızı da silebilirsiniz. <blockquote>DELETE FROM wp_comments WHERE comment_approved = 'spam';</blockquote> 0 = Comment Awaiting Moderation 1 = Approved Comment spam = Comment marked as Spam <a name="Kullanılmayan bütün yorumların silinmesi"></a> <h3>Kullanılmayan bütün etiketlerin silinmesi</h3> Bir şekilde eski yazılarınızı SQL üzerinden silerseniz bu yazılara bağlı olan etiketler silinmemiş olur. Bu kullanılmayan etiketleri aşağıdaki komut yardımı ile silebilirsiniz. <blockquote>DELETE 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;</blockquote> <a name="Kaç tane spam yorum olduğunun bulunması"></a> <h3>Kaç tane spam yorum olduğunun bulunması</h3> 'comment_approved' sütununa bakarak saydığımız değerleri sonuc değişkenine atayarak aşağıdaki gibi sonuçları görüntüleyebiliriz. <blockquote>SELECT `comment_approved`, COUNT(*) as sonuc FROM `wp_comments` GROUP BY `comment_approved` ORDER BY sonuc DESC LIMIT 0, 30SORGU SONUCU
<div> <div><code>comment_approved amount </code></div> <div><code>spam 12118</code></div> <div><code>1 104</code></div> <div><code>post-trashed 1</code></div> </div></blockquote> <a name="En fazla spam yorum alan yazıların bulunması"></a> <h3>En fazla spam yorum alan yazıların bulunması</h3> Popüler yazılarınız daha fazla spam yorum alabilir belki bunu tespit edip ona göre bir çözüm bulmak isteyebilirsiniz. <blockquote>SELECT `comment_post_ID`, COUNT(*) as sonuc FROM `wp_comments` WHERE `comment_approved` = 'spam' GROUP BY `comment_post_ID` ORDER BY sonuc DESC LIMIT 0, 20SORGU SONUCU
<div> <div><code>comment_post_ID amount </code></div> <div><code>1776 2299</code></div> <div><code>2184 1840</code></div> <div><code>143 1759</code></div> <div><code>1366 1145</code></div> <div><code>2377 960</code></div> <div><code>2456 512</code></div> <div><code>2536 497</code></div> <div><code>683 486</code></div> <div><code>1373 236</code></div> <div><code>1402 200</code></div> <div><code>1522 174</code></div> <div><code>2458 161</code></div> <div><code>1168 127</code></div> <div><code>10473 121</code></div> <div><code>647 116</code></div> <div><code>2357 114</code></div> <div><code>2831 111</code></div> <div><code>2420 110</code></div> <div><code>741 94</code></div> </div> </blockquote> <a name="Spam yorumların daha çok hangi ip adreslerinden geldiğinin bulunması"></a> <h3>Spam yorumların daha çok hangi ip adreslerinden geldiğinin bulunması</h3> Spamla mücadelede en fazla spam aldığınız ip adreslerini tespit edip bu adresleri .htaccess dosyası ile engelleyebilirsiniz. <blockquote>SELECT `comment_author_IP`, COUNT(*) AS sonuc FROM `wp_comments` WHERE `comment_approved` = 'spam' GROUP BY `comment_author_IP` HAVING sonuc > 10 ORDER BY sonuc DESC LIMIT 0, 30SORGU SONUCU
<div> <div><code>comment_author_IP amount </code></div> <div><code>173.242.120.58 450</code></div> <div><code>198.200.37.51 386</code></div> <div><code>198.200.37.59 287</code></div> <div><code>192.74.240.170 268</code></div> <div><code>109.163.236.87 218</code></div> <div><code>192.74.230.131 181</code></div> <div><code>212.59.28.172 157</code></div> <div><code>198.200.37.83 153</code></div> <div><code>91.236.74.117 148</code></div> <div><code>212.59.28.221 147</code></div> <div><code>142.0.138.77 140</code></div> <div><code>142.0.136.9 117</code></div> <div><code>192.74.228.242 109</code></div> <div><code>142.4.117.43 91</code></div> <div><code>137.175.1.235 88</code></div> <div><code>142.4.97.173 82</code></div> <div><code>142.4.117.162 80</code></div> <div><code>198.200.33.140 80</code></div> <div><code>192.74.228.161 73</code></div> <div><code>193.105.210.217 63</code></div> <div><code>142.4.96.66 63</code></div> <div><code>91.231.40.28 55</code></div> <div><code>193.105.210.216 54</code></div> <div><code>142.4.96.74 54</code></div> <div><code>192.74.228.164 51</code></div> <div><code>192.162.19.193 48</code></div> <div><code>80.93.213.249 48</code></div> <div><code>192.74.231.156 46</code></div> <div><code>142.0.136.12 46</code></div> <div><code>91.231.40.27 46</code></div> </div></blockquote> <div> <div>.htaccess dosyasına ip adresini aşağıdaki gibi ekleyerek sitenize girmesini dolayısıyla spam yorum bırakmasını da engelleyebilirsiniz.</div> <blockquote> <div>IP Engelleme Listesi
order allow,deny deny from 173.242.120.58 allow from all
</div></blockquote> </div>