API Tanımı : WordPress Transients API

API Tanımı : WordPress Transients API

Transients API WordPress seçenekler alt yapısının benzeri bir sistem olarak ortaya çıktı. Normal seçenekler alt yapısından farklı olarak bu API kullanıldığında belirlenen seçeneklerin ya da içeriklerin geçici süre ile veritabanında ya da memcache eklentisi yardımıyla sunucunun ram hafızasında tutulmasını sağlıyor. Böylelikle çerez kullanımı yerine daha güvenli olarak veritabanında seçenek saklayabiliyorsunuz.

Transients API

Genel olarak WordPress önbellekleme (cache) eklenti yapımcıların sorgu azaltarak sistemi hızlandırmak için kullandığı bu API WordPress içerisinde en çok sevdiğim kodlardan bir tanesi. Oluşturma, kaldırma gibi seçeneklerin ve veritabanında tutulacağı süreyi belirleyebilir ve sorgu sayısı ve sorgu çağırma zamanını azaltabilirsiniz.

Transients API fonksiyonları

API yardımıyla veritabanında konumlanacak seçeneklerin ve değerlerin belirlenmesi konusunda kullanabileceğiniz fonksiyonlar bulunmakta. Aslında tamı tamına 3 adet fonksiyon var. Bunlar ve kullanımları şu şekilde;

  • set_transient : API içerisinde seçenek adını, değerini ve ne kadar tutulacağı konusunda belirlemeyi bu fonksiyonla tanımlıyoruz.
  • get_transient : Belirlenen seçeneği getirmeye yarayan fonksiyon budur.
  • delete_transient : Belirlenmiş olan seçeneği zamanını beklemeden elle silme işlemi yapan fonksiyon.

Yukarıdaki fonksiyonları WordPress Multisite özelliği ile kullandığınızda ise;

  • set_site_transient : Kullanılan alt site içerisindeki değeri belirlemeye yarayan fonksiyon.
  • get_site_transient : Kullanılan alt site içerisindeki değeri getirmeye yarayan fonksiyon.
  • delete_site_transient : Kullanılan alt site içerisindeki değeri elle silmeye yarayan fonksiyon.

Transients API Fonksiyonları Kullanımı

Değerleri Kaydedelim

set_transient fonksiyonunu kullanırken Türkçe olmayan karakterler ile önce seçenek adını belirlemeliyiz. Sonrasında değeri belirlememiz gerekmekte. Bu veri elle verdiğimiz ya da bir fonksiyondan gelebilecek veri olabilir. Sonrasında ise zaman damgasını belirlemeliyiz. WordPress tarafından önceden tanımlanmış zaman tanımlarını kullanabiliriz. Yazının içinde bunlardan da bahsedeceğim.

set_transient( $secenek, $deger, $zaman );

Burada $secenek seçenek adı, $deger değeri ve $zaman aşağıda belirttiğim zaman değerinin karşılığıdır;

WordPress Zaman Tanımları

WordPress kendi içerisinde zaman tanımlamalarını barındırmaktadır. Bunlar WordPress 3.5’tan itibaren DEFINE yöntemi ile önceden tanımlanmıştır. Bu değerler saniye bazından tanımlama yapar.

MINUTE_IN_SECONDS  = 60 //(saniye) dakika tanımı
HOUR_IN_SECONDS    = 60 * MINUTE_IN_SECONDS //saat tanımı
DAY_IN_SECONDS     = 24 * HOUR_IN_SECONDS //gün tanımı
WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS //hafta tanımı
MONTH_IN_SECONDS   = 30 * DAY_IN_SECONDS //ay tanımı
YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS //yıl tanımı

Zaman tanımları seçeneğin veritabanında ne kadar tutulacağını belirler ve bunun kullanımı şu şekildedir. Örnekte “deneme_secenek” adında bir seçeneğe “Selam” değeri ile bir saatlik bir tanım yapıyorum. Böylelikle deneme_secenek bir saat boyunca veritabanından erişilebilir olacak.

set_transient( 'deneme_secenek', 'Selam', HOUR_IN_SECONDS );

Değerleri Getirelim

Değerleri getirmek için get_transient fonksiyonunu kullanıyoruz. Burada $secenek seçeneğin adını temsil ediyor.

get_transient($secenek);

Önceden belirlediğimiz deneme_secenek seçeneğinin verisini döndürmek için kullanalım.

if(get_transient('deneme_secenek') !=""){
echo get_transient('deneme_secenek');
} else {
echo 'Veri Yok';
}

Bu sorgunun döngüsü eğer verimiz var ise “Selam” olacaktır. Eğer belirlenmemişse ‘Veri Yok’ olarak bir çıktı alacağız.

Seçeneği Silelim

delete_transient daha önce belirttiğim gibi eklenen seçeneğin silinmesini sağlayan bir fonksiyondur. Normal şartlar altında WordPress zamanı dolduğunda bu veriyi silecektir ancak biz bu veriyi daha önce silmek için bu fonksiyondan faydalanabiliriz. Yine $secenek daha önce belrilediğimiz seçeneğin adı olmak durumunda.

delete_transient($secenek);

Bizim örneğimizde ise “deneme_secenek” verisini silmemiz gerekmekte.

Tam Bir Örnek Verelim

Öne çıkan yazılarımı çağırdığımız ve sorgu süremiz, yapılan sorguları azaltmak için Transients API kullandığımız bir loop hazırlayalım. Burada öncelikle sorgumuzu veritabanından sorgulatıyoruz. Eğer böyle bir sorgu bulunamazsa WP_Query kullanarak The Loop oluşturuyoruz. Örnekte çok basit bir başlık çıktısı verdim.

<?php 
// Yazıları veritabanında sorgulayalım. Eğer Yok ise yeni bir query ile alalım.
if ( false === ( $one_cikanlar = get_transient( 'one_cikan_query' ) ) ) {
	
      $one_cikanlar = new WP_Query(
	   array(
		'category' => 'featured',
		'posts_per_page' => 5
	   ));

	// Zaten veritabanında olmayan bir queryi 12 saatliğine veritabanına kaydedelim.
	set_transient( 'one_cikan_query', $one_cikanlar, 12 * HOUR_IN_SECONDS );
} ?>
 
// Normal bir The Loop Çağıralım
<?php if ( $one_cikanlar->have_posts() ) : ?>
  
   <?php while ( $one_cikanlar->have_posts() ) : $one_cikanlar->the_post(); ?>
          <?php echo the_title();?><br />
   <?php endwhile; ?>
   
   <?php else: ?>
         <?php echo 'İçerik Bulunamadı'; ?>
<?php endif; ?>

<?php wp_reset_postdata(); ?>

Umarım yeteri kadar açıklayıcı olabilmişimdir. Daha fazlası için WordPress Codex sayfasını ziyaret edebilirsiniz. WordPress Codex

2 thoughts on “API Tanımı : WordPress Transients API”

  1. Merhaba,

    Benim sorgu konusunda en çok sıkıntı yaşadığım nokta Revision Slider ve Visual Composer eklentileri ile ilgili. Transients API bu eklentilere uygulanabilir mi? Uygulanabiliyorsa başka bir yazınızda bunu da anlatabilir misiniz?

    1. Selam,

      Revolution slider üzerinde direkt olarak kodlamaya müdahale gerektirebilir. Ancak Visual composer geliştirilebilir olduğundan vc-addons içindeki ya da kullanılan şablonlardaki sorgulara transient eklenerek sorgu sayısı düşürülebilir. Yapısal olarak değerlendirerek yazı ile taçlandırabilirim evet :D

Comments are closed.