WordPress Sql Cache Yöntemi

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.

<h3><?php echo get_option('er_yan_thumb_baslik'); ?></h3>
<?php $usluer = new WP_Query("showposts=".get_option('er_yan_thumb_kac')."&cat=".get_option('er_yan_thumb_kat').""); while($usluer->have_posts()) : $usluer->the_post(); ?>
	<?php
	$image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full');
	if ( has_post_thumbnail() ) { ?>
		<div class="thumb3">
			<a href="<?php the_permalink() ?>" title="">
				<span class="ballon" onmouseover="tooltip.show('<?php the_title(); ?>&lt;br />Okunma: <?php if(function_exists('the_views')) { the_views(); } ?>');" onmouseout="tooltip.hide(); "><img src="<?php bloginfo('template_url'); ?>/scripts/timthumb.php?src=<?php echo $image_url[0]; ?>&amp;w=60&amp;h=53&amp;zc=1" alt="<?php the_title(); ?>" /></span>
			</a>
		</div>
	<?php } ?>
<?php endwhile; ?>

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

<?php
$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();
?>

<h3><?php echo get_option('er_yan_thumb_baslik'); ?></h3>
<?php $usluer = new WP_Query("showposts=".get_option('er_yan_thumb_kac')."&cat=".get_option('er_yan_thumb_kat').""); while($usluer->have_posts()) : $usluer->the_post(); ?>
	<?php
	$image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full');
	if ( has_post_thumbnail() ) { ?>
		<div class="thumb3">
			<a href="<?php the_permalink() ?>" title="">
				<span class="ballon" onmouseover="tooltip.show('<?php the_title(); ?>&lt;br />Okunma: <?php if(function_exists('the_views')) { the_views(); } ?>');" onmouseout="tooltip.hide(); "><img src="<?php bloginfo('template_url'); ?>/scripts/timthumb.php?src=<?php echo $image_url[0]; ?>&amp;w=60&amp;h=53&amp;zc=1" alt="<?php the_title(); ?>" /></span>
			</a>
		</div>
	<?php } ?>
<?php endwhile; ?>

<?php
// 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.

<?php include('sqlcache/yanthumb.php') ?>

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.

<?php

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.

Bana kahve ısmarlamak ister misin?

Bunları da okuyabilirsin
Yazı hakkındaki yorumun nedir?

17 Yorum
  1. Tuncay
    8 Ağustos 2012 - 18:23
    Cevapla
  2. AktifBlogum
    11 Ağustos 2012 - 00:47
    Cevapla
  3. halil
    11 Ağustos 2012 - 16:06
    Cevapla
  4. kaan
    11 Ağustos 2012 - 21:12
    Cevapla
    • Usluer
      11 Ağustos 2012 - 22:20
      Cevapla
  5. Emre PİRİNÇCİ
    15 Ağustos 2012 - 16:40
    Cevapla
  6. bcakir
    28 Eylül 2012 - 12:21
    Cevapla
  7. Baris Turan
    8 Ekim 2012 - 16:03
    Cevapla
    • Usluer
      8 Ekim 2012 - 18:34
      Cevapla
  8. Yasin
    27 Kasım 2012 - 14:41
    Cevapla
    • Usluer
      27 Kasım 2012 - 15:10
      Cevapla
  9. gökhan
    2 Şubat 2013 - 13:48
    Cevapla
    • Usluer
      2 Şubat 2013 - 13:53
      Cevapla
      • gökhan
        2 Şubat 2013 - 14:32
        Cevapla
        • Usluer
          2 Şubat 2013 - 14:42
  10. Özgür Kalyoncu
    15 Kasım 2013 - 09:31
    Cevapla
  11. alper
    13 Nisan 2014 - 16:46
    Cevapla