WordPress Filter ve Action’lara Genel Bakış 1

Giriş

Öncelikle herkese merhabalar.

Rooteto‘ya yazdığım son yazının üzerinden aylar geçtikten sonra farkettim ki WordPress filter ve action‘larla ilgili Türkçe kaynak neredeyse hiç yok. WordPress öğrenmek için İngilizce’nin şart olmamasını ve yazılım alanında Türkçe kaynak sayısının artmasını isteyen biri olarak “filter ve action nedir, nerede kullanılır, ne işe yarar” temalı bu makaleyi yazmaya karar vermiş bulunmaktayım. Hadi bakalım.

Nedir bunlar?

Filter (filtre olarak çevrilebilir), WordPress’in çekirdek fonksiyonlarında bolca bulunan, böylelikle tema ve eklenti geliştiricilerine çekirdek dosyalarını değiştirmeye gerek bırakmadan ilgili değişkeni/fonksiyonun döndüreceği değeri manipule etmeye olanak tanır.

Action’lar (aksiyon) da filter’lar gibi WordPress çekirdek fonksiyonlarında bolca bulunur. Filter’lardan farkı, döndürülecek sonucu manipule etmek yerine, fonksiyon çalışırken içerisinde tema ve eklenti geliştiricilerinin kendi fonksiyonlarını çalıştırabilmelerini sağlamasıdır.

Çok karışık mı oldu? Ne işe yaradıklarını öğrendiğinizde tanıma gerek kalmayacaktır. 🙂

Nasıl Kullanılır?

Filter:

WordPress’te birçok fonksiyonda filter uygulanır. Bize düşen ise, manipule edeceğimiz değişkende kullanılan filter etiketini öğrenmek ve temamızda/eklentimizde kullanmak. Filtreleme yapan fonksiyonun kullanımı ve parametreleri şu şekilde:

add_filter( $etiket, $uygulanacak_fonksiyon, $oncelik, $parametre_sayisi );
  1. $etiket (string): filter’ın etiketi. Zorunludur.
  2. $uygulanacak_fonksiyon (string): filtrelemeyi yapacak fonksiyonun adı. Zorunludur.
  3. $oncelik (integer): 1-10 arası öncelik sayısı. Aynı etiketi kullanan filtrelerden, öncelik parametresi daha düşük olan daha önce çalıştırılır. Opsiyonel bir parametredir.
  4. $parametre_sayisi (integer): Filtre fonksiyonunun kabul edeceği parametre sayısı. Opsiyoneldir

Örnek Kullanım:

the_content etiketli filter’ı kullanarak örnek verelim.

add_filter( 'the_content', 'yazi_sonuna_hoscakal_ekle' );
function yazi_sonuna_hoscakal_ekle( $content ) {
    $hoscakal = "<p>Bir sonraki yazıda görüşmek üzere, hoşçakalın.</p>";

    // içeriğin sonuna hoşçakal cümlesini ekle.
    $content .= $hoscakal;

    // filtrelenmiş içeriği döndür.
    return $content;
}

Java kullanıcılarının “tıpkı @Override gibiymiş” dediğini duyar gibiyim.

Yukarıdaki kodu temanızın functions.php dosyasına eklediğinizde, tüm yazılarınızın sonunda $hoscakal cümlesinin yazdırıldığını göreceksiniz.

Action:

Action’lar belli olaylar sırasında tetiklenerek, temanızda, eklentinizde belirlediğiniz fonksiyonların çalıştırılmasını sağlar. jQuery kullanıyorsanız $(element).on("click", function() { // elemente tıklandı }) kullanımıyla bağlantı kurabilirsiniz.

Kullanım şekli ve parametreleri:

add_action( $etiket, $uygulanacak_fonksiyon, $oncelik, $parametre_sayisi );
  1. $etiket (string): action (hook)’ın etiketi. Zorunludur.
  2. $uygulanacak_fonksiyon (string): action’ı gerçekleştirecek fonksiyonun adı. Zorunludur.
  3. $oncelik (integer): 1-10 arası öncelik sayısı. Aynı etiketi kullanan action’lardan, öncelik parametresi daha düşük olan daha önce çalıştırılır. Opsiyonel bir parametredir.
  4. $parametre_sayisi (integer): action fonksiyonunun kabul edeceği parametre sayısı. Opsiyoneldir

Örnek Kullanım

Örneğin siteye yeni bir kayıt yapıldığında, wp_insert_user() fonksiyonu yeni üye bilgilerini veritabanına ekledikten hemen sonra “user_register” etiketli bir action uygular. Bu action’ı kullanarak yeni üyeye “hoşgeldin” temalı bir e-posta gönderelim:

add_action( 'user_register', 'hosgeldin_maili_gonder' );
function hosgeldin_maili_gonder( $user_id ) {
    // kaydolan kullanıcının ID'sini kullanarak e-posta adresini al.
    $alici = get_userdata( $user_id )->user_email;

    $konu = "Sitemize Hoşgeldiniz";

    $mesaj = "Sitemize kaydolduğunuz için teşekkür ederiz :)";

    // mail'i gönder.
    wp_mail( $alici, $konu, $mesaj );
}

Bu kodu temanızın functions.php dosyasına eklediğinizde, sitenize kaydolan kişiye ilgili mesaj gönderilecektir.

Nasıl çalışırlar?

Filter:

WordPress çekirdek fonksiyonlarında apply_filters() fonksiyonuyla değişkenlerin filtrelenmesine imkan verilir. İlgili etiketli filter’a add_filter() fonksiyonunu kullanarak müdahale ettiğimizde, çekirdek fonksiyondaki apply_filters fonksiyonu manipulasyonu gerçekleştirir.

Hepimiz, yazı içeriğinin bir WordPress çekirdek fonksiyonu olan the_content() fonksiyonuyla yazdırıldığını biliyoruz. WordPress kaynak kodlarında bu fonksiyona baktığımızda şöyle bir şeyle karşılaşırız:

function the_content( $more_link_text = null, $strip_teaser = false) {
	$content = get_the_content( $more_link_text, $strip_teaser );

	/**
	 * Filter the post content.
	 *
	 * @since 0.71
	 *
	 * @param string $content Content of the current post.
	 */
	$content = apply_filters( 'the_content', $content );
        ...
	echo $content;
}

$content = apply_filters( 'the_content', $content ); kodunun bulunduğu satır, tam olarak filtrenin uygulandığı satır. Böylelikle ‘the_content’ etiketine uyguladığımız her filter, $content değişkenini, haliyle de the_content() fonksiyonunun çıktısını değiştirecektir.

Action:

WordPress’te birçok önemli olayı gerçekleştiren fonksiyonda do_action() fonksiyonunun çalıştırıldığını görebilirsiniz. Örneğin WordPress’in üye kaydını veritabanına eklemek için kullandığı wp_insert_user() fonksiyonu, tüm işlemler bittikten sonra “user_register” etiketli bir action çalıştırır:

function wp_insert_user( $userdata ) {
    global $wbdb;
    // --kullanıcı bilgileri kontrolü ve veritabanına ekleme--

    /**
    * Fires immediately after a new user is registered.
    *
    * @since 1.5.0
    *
    * @param int $user_id User ID.
    */
    do_action( 'user_register', $user_id );
}

Yukarıdaki WordPress çekirdek fonksiyonundan da anlaşıldığı üzere “user_register” etiketli action’a add_action() fonksiyonuyla referans verdiğiniz her fonksiyon, wp_insert_user() fonksiyonu çalışırken do_action( 'user_register', $user_id ) satırında çağrılacaktır. Böylelikle yeni kayıt sonrası (Nasıl Kullanılır? bölümündeki örnekteki gibi) yeni kullanıcıya e-posta gönderebilecek, yeni kullanıcının user meta’sını güncelleyebileceksiniz.

Kendi Filter ve Action’ınızı Tanımlama

Bir tema ya da eklenti yazıyorsanız, yazılımınızı kullanacak kişilerin kodlarınızı değiştirmek yerine fonksiyonlarınızı manipule etmesini isteyebilirsiniz. Action ve filter’ları tema/eklentinizde kullanmak diğer geliştiricilere temanızı/eklentinizi mükemmelleştirecek eklentiler yazabilmesine de olanak tanır. Bu şekilde temanız/eklentiniz çok daha “geliştirici dostu” olacaktır.

Örneğin yeni kaydolan kullancııya e-posta gönderen bir eklenti hazırladınız ve WordPress Eklenti’lerine eklediniz. Yeni kullanıcıya gönderilecek e-posta’nın başlık ve içeriğine filter ekleyebilir, e-posta gönderildikten önce ve sonrasına action uygulayabilirsiniz.

add_action( 'user_register', 'hosgeldin_maili_gonder' );
function hosgeldin_maili_gonder( $user_id ) {
    // kaydolan kullanıcının ID'sini kullanarak e-posta adresini al.
    $alici = get_userdata( $user_id )->user_email;

    $konu = "Sitemize Hoşgeldiniz"; // varsayılan e-posta başlığı.
    $konu = apply_filters( 'eklentim_mail_basligi', $konu );

    $mesaj = "Sitemize kaydolduğunuz için teşekkür ederiz :)"; // varsayılan mesaj.
    $mesaj = apply_filters( 'eklentim_mail_mesaji', $mesaj );

    do_action( 'eklentim_mail_gondermeden_once' );

    // mail'i gönder.
    wp_mail( $alici, $konu, $mesaj );

    do_action( 'eklentim_mail_gonderdikten_sonra' );
}

Bu sayede geliştiriciler fonksiyon içeriğini değiştirmeye gerek duymadan mail başlık ve içeriğini filtreleyebilir, mail gönderilmeden önce ve sonrasında diledikleri işlemi yapabilirler.

Not: Yukarıdaki eklentiyi yazmayı ve bu şekilde filtrelemek pek de mantıklı olmaz. Ancak adı üstünde bu bir örnek.

Meraklısına:

  • add_action() fonksiyonu add_filter() fonksiyonunu döndürür. Ancak add_action() yerine add_filter() kullanılmamalıdır.
  • Custom Post Type oluştururken WordPress’in ‘init‘ isimli action’ı kullanılır.

Kapanış

Tema/eklenti yazarken filter ve action’ları kullanarak kolayca WordPress fonksiyonlarını manipule edebilir, bu manipulasyona gerek duymadığımızda kolayca kaldırabiliriz. Ayrıca tema/eklentimizin kolayca manipule edilebilir olması da esneklik ve “kolay düzenlenebilirlik” açısından oldukça işimize yarar.

1 Comment

  1. WordPress de yeni sayılırım ve en çok kafamı kurcalayan kısmı sayende çözdüm teşekkür ederim takipçinim

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.

WordPress 4.4+ ile Gelen Embed Script Dosyası Nasıl Kapatılır? – wp-embed.min.js 0

embed script kapatma

WordPress 4.4+ sürümünden sonra gelen yeni bir özellik var. O özellik daha önceden sosyal medya hesapları için eklenmişti. Panelde yazı yazarken sosyal medya hesaplarından bir yazı (post) linki eklediğiniz de direk o içeriği sayfaya ekliyordu. Twitter, youtube gibi aktif siteleri kullanmışsınızdir.

Bu yeni özellik de WordPress’in yazılarını böyle paylaşabiliyor olmanız. Özelliği kapatmak mantıklı olmayabilir ama wp-embed.min.js dosyasını kapatıp, kendi main.js dosyamıza eklememiz daha mantıklı.

Kaynak koduna girdiğiniz de sayfanın en altında bulunuyor.

İlerleyen zamanlarda WordPress’i optimize etmek için gerekli işlemleri sıralayıp onlarla ilgili de ayrıca seri bir makale yazmak istiyorum bu da ufaktan bir başlangıç olsun 🙂

Alttaki kodu function.php dosyamızın içerisine yerleştiriyoruz. Admin hariç bu dosyayı kimse çekmiyor. Ama tabi dediğim gibi bunun içerisindekini de main.js dosyanıza yada custom.js dosyanıza eklemeniz gerekiyor. Öyle direk kaldırmakla olmaz 🙂

// rooteto.com - wp-embed.min.js disable
function rooteto_wp_embed_and_jquery() {
	if (!is_admin()) {
		wp_deregister_script('wp-embed');
	}
}
add_action('init', 'rooteto_wp_embed_and_jquery');

WordPress Gzip konusunu da mutlaka incelemenizi tavsiye ederim.

Yandex Browser Fenerbahçe Temalı İnternet Tarayıcısı 0

Yandex sponsorluğunda Fenerbahçe temalı yeni internet tarayıcısı Yandex Browser indirilmeye sunuldu.

Yandex Browser FB temalı internet tarayıcısı Fenerbahçeye gönül vermiş taraftarların internet tarayıcısıdır. Türkiyede ilk kez bir Futbol klubü için Yandex tarafından yapılan internet tarayıcısı oldu. Yandex Browser ile aşığı olduğunuz Fenerbahçe klubünün teması ile artık internette rahatça gezebilirsiniz.

grey

Yandex Browser ile düşük hızlardaki turbo modu ve yüksek bağlantı hızlarında gösterdiği performans ile diğer internet tarayıcılarına taş çıkartıyor. Yandex ve Fenerbahçe işbirliği ile ortaya çıkan browser arayüzünde Fenerbahçe ile ilgili tüm haberlere ulaşabileceksiniz. Diğer web tarayıcılardan bir farkı olmayan Yandex browser ile kullanabileceğiniz diğer özellikler ise şöyle:

  • Fenerbahçe teması
  • Özelleştirilebilir arayüzü
  • Eklenti desteği
  • Turbo modu
  • Farklı arama motoru seçenekleri
  • Tüm ayarları senkronize etme
  • Favori link ekleme
  • Çok az ram kullanımı
  • İngilizce ve türkçe dil desteği

grey

Chromium tabanlı olarak karşımıza çıkan Fenerbahçe Temalı Yandex Browser hızı, kullanım kolaylığı ve Fenerbahçe haberleri ile çok rahat edeceksiniz. Tamamen ücretsiz olarak indirebileceğiniz internet tarayıcısını hemen alttaki bağlantıdan indirin.

Yandex Browser Fenerbahçe Temalı İnternet Tarayıcısı

Most Popular Topics

Editor Picks