Merhaba arkadaşlar. Anlatacağım bu yöntem sayesinde birçok arkadaşın muzdarip olduğu fazla sorgu sayısından kurtulacaksınız. Bu sayede blogunuzun açılış hızı da artmış olacak. Öncelikle bu yöntem Selçuk Kılıç'a aittir. Benim anlatmamın sebebi ufak birkaç değişiklik ve biraz daha yalın bir dille anlatmamdır.

Eğer bu yöntemi kullanırsanız W3 Total Cache, WP Super Cache gibi eklentileri kullanmanıza gerek kalmaz. Blogunuzda ne kadar sorgu olursa olsun, bu yöntem sayesinde tüm sorgular sadece 2 sorguya indiriliyor.

Öncelikle tema dosyamızın içerisine sqlcache adında bir klasör açalım. Buraya cache belleğe alınmış kodların bulunduğu dosyaları atacağız. Şimdi asıl anlatıma geçebiliriz.

Kod kalıbımız aşağıdaki gibidir.

$cache_ismi = "sidebarcache";
$cache_zamani = 60 * 10; // 60*10=600 buda 10 dakikaya esittir heralde :)

// Cache varmi yokmu kontrolunu yaptiriyoruz. eger yoksa sorgu yaptirip, ciktiyi DBye kaydeiyoruz.
if(false === get_transient($cache_ismi)){
ob_start();

/******* Cache Alinacak sorgular, kodlar v.s... *******/

// Burda ciktiyi DB ye kaydediyoruz..
set_transient($cache_ismi, ob_get_contents(), $cache_zamani);
ob_end_flush();

// Eger cache varsa DBden bilgileri cekip ekrana yazdiriyoruz.
}else{

// Echo ile DBdeki cache bilgilerini ekrana yazdiriyoruz.
echo get_transient($cache_ismi);
}


Selçuk Kılıç yardımcı kodlarla kalıbımızı çok güzel açıklamış. Zaten burada değiştirmeniz gereken 2 kısım var. Bunlardan ilki 1. satırdaki $cache_ismi yazan değişken. Şuan bu değişkene sidebarcache değeri atanmış. Siz bunu isteğinize göre değiştirebilirsiniz. Unutmayın, her cache belleğe alınacak kod yığını için farklı cache ismi girmelisiniz. Değiştirmeniz gereken ikinci kısım ise 2. satırdaki cache zamanı. Aslında bunu değiştirmeseniz de olur.

Peki kalıbımız bu fakat biz bunu nasıl kullanacağız? Hemen onu da anlatayım. Mesela benim aşağıdaki şekilde bir kod yığınım var diyelim.


have_posts()) : $usluer->the_post(); ?>
$image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full');
if ( has_post_thumbnail() ) { ?>




Atıyorum ben bu kodları kullandığım zaman bloguma ekstradan 20 sorgu çıkartıyor. Bu kodlara sql cache yöntemi uygulayalım.

$cache_ismi = "yanthumb";
$cache_zamani = 60 * 10; // 60*10=600 buda 10 dakikaya esittir heralde :)
// Cache varmi yokmu kontrolunu yaptiriyoruz. eger yoksa sorgu yaptirip, ciktiyi DBye kaydeiyoruz.
if(false === get_transient($cache_ismi)){
ob_start();
?>


have_posts()) : $usluer->the_post(); ?>
$image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full');
if ( has_post_thumbnail() ) { ?>




// Burda ciktiyi DB ye kaydediyoruz..
set_transient($cache_ismi, ob_get_contents(), $cache_zamani);
ob_end_flush();
// Eger cache varsa DBden bilgileri cekip ekrana yazdiriyoruz.
}else{
// Echo ile DBdeki cache bilgilerini ekrana yazdiriyoruz.
echo get_transient($cache_ismi);
}
?>


Bu şekilde bir dosya oluşturdum ve adını da yanthumb.php yaptım. Gördüğünüz gibi cache ismini de kendime göre düzenledim. Ardından kaydettiğim bu dosyayı ilk başta oluşturduğumuz sqlcache isimli klasöre atıyorum. Son olarak da bu dosyayı kullanacağımız yere çekmek kaldı. Onun için de aşağıdaki kodu cache belleğe aldığım kodların yerine yazıyorum.



Buraya kadar her şey tamam. Sql cache yöntemi başarı ile bitirdik fakat bir şey eksik. Cache belleğe alınan veriler nasıl sıfırlanacak? Onun içinde Selçuk Kılıç şöyle bir şey düşünmüş; yazı eklendiğinde, güncellendiğinde veya silindiğinde cache bellekteki veriler sıfırlansın. Bunun içinde functions.php dosyamızı açıyoruz ve aşağıdaki kodu buluyoruz.



Bu kodun hemen altına aşağıdaki kodları ekliyoruz.

function usluer_cache_sil(){
delete_transient( 'CACHE1' );
delete_transient( 'CACHE2' );
delete_transient( 'sidebarCACHE' );
}

add_action('publish_post', 'usluer_cache_sil');
add_action('update_post', 'usluer_cache_sil');
add_action('delete_post', 'usluer_cache_sil');


Buradaki CACHE1, CACHE2 ve sidebarCACHE yazan yerler sizin cache belleğe aldığınız kodlara vermiş olduğunuz isimler. Kısacası cache isimleri. Bu yerleri kendinize göre düzenlemelisiniz.

Hepsi bu kadar. Bu yöntem sayesinde büyük bir dertten kurtulmuş oluyoruz.

Selçuk Kılıç'a teşekkür ederiz.

Kaynak: http://www.usluer.net/wordpress-sql-cache-yontemi/