WordPress için eklenti yazmak…-2

WordPress için eklenti yazmak…-2

Önceki yazıyı okumayanlar lütfen şu linke tıklayarak ilk yazıdaki bebek adımlarını takip etsinler ve bu yazıya geçsinler. İlk yazıda anlattığım üzere ufak bir eklenti yazmıştık. Tek yaptığı şey merhaba_dunya fonksiyonundaki Merhaba Dünya yazısını istediğimiz alana yazmasıydı. İkinci bölümde bu işi biraz daha ilerleteceğiz. Çok büyük bir atılım yapmayacağız ama en azından bizim tarafımızdan yönetilebilen bir eklenti oluşturacağız. Öncelikle güvenlik ile ilgili bir şey eklememiz gerekiyor eklenti dosyamıza.

Önceki yazıdan kaldığımız şekilde php kodumuz şuydu;

<?php
/*
Plugin Name: Eklenti Adı
Plugin URI: Eklenti linki (sitenizden bir link olabilir)
Description: Eklenti Açıklaması
Version: Versiyon (0.1 gibi)
Author: Adınız Soyadınız ya da hangi ismi kullanmak istiyorsanız
Author URI: Varolan site adresiniz
License: GNU
*/
/*Fonksiyon yazalım*/
function merhaba_dunya()
{
echo "Merhaba Dünya";
}
?>

Bu koda ek olarak ve fonksiyonlarımızdan önce, dosyamızın direkt olarak tarayıcı üzerinden çağırılmasını engelleyici bir kod eklememiz gerekmekte. O da şu oluyor;

if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF']))
		{
				die('You are not allowed to call this page directly.');
		}

Bu kodu fonksiyonumuzdan önce (eklenti tanımı yapılan yerin hemen altına) ekleyince görünüm şöyle olmakta.

<?php
/*
Plugin Name: Eklenti Adı
Plugin URI: Eklenti linki (sitenizden bir link olabilir)
Description: Eklenti Açıklaması
Version: Versiyon (0.1 gibi)
Author: Adınız Soyadınız ya da hangi ismi kullanmak istiyorsanız
Author URI: Varolan site adresiniz
License: GNU
*/
/* Direkt Çağrıları Engelleyelim */
if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF']))
		{
				die('You are not allowed to call this page directly.');
		}
/*Fonksiyon yazalım*/
function merhaba_dunya()
{
echo "Merhaba Dünya";
}
?>

Bunu yapmamızın nedenini yukarıda anlatmıştım.

Peki bu kod ne yapar?

Şöyle ki eklenti dosyanızın belirli bir yolu olacaktır. http://www.siteniz.com/wp-content/plugins/eklenti-adiniz/eklenti-adiniz.php Bu yol ile tarayıcı üzerinden çağırıldığında kodlarınız çalışacaktır. En azından belirli güncelleme betikleri barındırıyorsanız bunların boş dönmesi sağlanarak bir açık kullanılmış ve kullanan sistemde güvenlik zaafiyeti oluşturmuş olacaksınız. Bunu engellemek için bu tip çağırımlarda hata verdiritme yoluna gidiyoruz. Yukarıdaki kod tüm dosya içeriğinizi You are not allowed to call this page directly. haline çevirerek işlemi sonlandıran die komutunu sisteme gönderiyor ki, bu da işlem ve işlemlerin durdurulmasını sağlar.

Güvenlik meselesini hallettiysek gelelim başka bir önemli hususa.

Eklenti Yönetim Sayfası Oluşturmak

Eklentimizin yönetilebilir şeyler barındırmasını istiyorsak, bunun WordPress yönetim paneli içerisinde de bir yeri olmalı. Bunu yapabilmek için bir sayfa, yükleme, silme ve güncelleme işlemlerini yapacak fonksiyonları oluşturmalıyız. Sırasıyla bunları ekliyorum.

Yönetim sayfası oluşturabilmek için önce eklenti kurulumunda bunu WordPress fonksiyonuyla belirtmeli ve oluşturmalıyız. İlk Önce yönetim sayfasını oluşturalım.

		<div style="margin-top:10px;">
			<h2>Eklentim Yönetim Sayfası</h2>
				<form method="post" action="">
					<label for="merhaba">Göstermek İstediğiniz Yazıyı Yazın</label>
					<input type="text" id="merhaba" name="merhaba" value=""/><br />
					<input type="submit" id="submit" name="submit" value="<?php _e('Save Changes'); ?>">
				</form>
		</div>

Basit bir HTML form :) Bunu sisteme aktarmak için yapmamız gereken daha çok şey var ama.

Yönetim Sayfasını Menüye Kaydettirmek

Yönetim alanı için yukarıdaki kodumuzu yazdık ama hala işimiz bitmiş değil. Yukarıdaki kodu önce WordPress menü alanına kaydettirmeli, sonra da bu sayfaya erişimi sağlamalıyız. Peki bunu nasıl yapacağız?

Öncelike add_action özelliğini kullanmanız gerekmekte. Bu özellik ile istediğimiz bir fonksiyonu, istediğimiz menüye, üst kısımdaki css kodlarının arasına, javascript dosyalarının içine vb. yerlere eklemek için kullanabiliyoruz. Biz şimdilik admin_menu alanında değişiklik yapacağız. Bunun için öncelikle şu kodu bir inceleyelim.

add_action('admin_menu', 'eklentim_yonetim');
function eklentim_yonetim()
		{
				add_options_page('Eklentim','Eklentim', '8', 'eklentim', 'eklentim_fonks');
		}

Gördüğünüz gibi menümüz için bir fonksiyon kullandık. add_action özelliğini admin_menu alanına eklentim_yonetim fonksiyonumuzu eklemek için çağırdık. Peki bu fonksiyon basit bir anlatımla ne yapar?

Şunu yapmakta. Bize Eklentim adı altında bir menü oluşturmakta. add_options_page kodunun içerisindeki alanlar Ayarlar alanı altına bir ek menü açar ve eklentimizin menüsünü sekizinci sıraya ekler ve bunu yol olarak options-general.php?page=eklentim yolu ile çağırır. Kullanacağı fonksiyon (bizim admin menümüz) ise eklentim_fonks adında birazdan yazacağımız fonksiyondur.

Şimdi fonksiyonumuzu yazalım;

function eklentim_fonks() {
		?>
		<div style="margin-top:10px;">
			<h2>Eklentim Yönetim Sayfası</h2>
				<form method="post" action="">
					<label for="merhaba">Göstermek İstediğiniz Yazıyı Yazın</label>
					<input type="text" id="merhaba" name="merhaba" value=""/><br />
					<input type="submit" id="submit" name="submit" value="<?php _e('Save Changes'); ?>">
				</form>
		</div>
		<?php }

Yukarıda gördüğünüz üzere php etiketlerini kapattık. Bunu neden yaptık? HTML fonksiyonlarımızı birton echo ile çağırmak yerine tek başına ve bir kere çağırmak için. Genel anlamda kodumuz şu şekilde oldu.

<?php
/*
Plugin Name: Eklenti Adı
Plugin URI: Eklenti linki (sitenizden bir link olabilir)
Description: Eklenti Açıklaması
Version: Versiyon (0.1 gibi)
Author: Adınız Soyadınız ya da hangi ismi kullanmak istiyorsanız
Author URI: Varolan site adresiniz
License: GNU
*/
/* Direkt Çağrıları Engelleyelim */
if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF']))
        {
                die('You are not allowed to call this page directly.');
        }
		
/* Admin Alanı İçin Sayfa Linki ve Sayfamızı Oluşturalım */
add_action('admin_menu', 'eklentim_yonetim');

function eklentim_yonetim()
		{
				add_options_page('Eklentim','Eklentim', '8', 'eklentim', 'eklentim_fonks');
		}

		function eklentim_fonks() {
		?>
		<div style="margin-top:10px;">
			<h2>Eklentim Yönetim Sayfası</h2>
				<form method="post" action="">
					<label for="merhaba">Göstermek İstediğiniz Yazıyı Yazın</label>
					<input type="text" id="merhaba" name="merhaba" value=""/><br />
					<input type="submit" id="submit" name="submit" value="<?php _e('Save Changes'); ?>">
				</form>
		</div>
		<?php }
		
/*Fonksiyon yazalım*/
function merhaba_dunya()
{
echo "Merhaba Dünya";
}
?>

Bu kodlar şu anda verinizi kaydetmez, kaydettiklerinizi göstermez, sadece bir yönetim panelinin başlangıcını yaptık. İşlerden ayırabildiğim zamanlarda ufak ufak ilerlemeye devam edeceğiz. Bir sonraki yazımda yönetim panelini kullanarak değerlerimizi kaydettirmeyi, ilk yükleme anında yüklenecek olan ve eklentiyi kaldırma durumunda sileceğimiz verilerimizi ayarlayacağız.

Eğer bir soru, düşünce veya anlatımımda bulduğunuz hata varsa lütfen belirtiniz.

İlk Yazı : WordPress için eklenti yazmak…
Üçüncü Yazı : WordPress için eklenti yazmak…-3
Dördüncü Yazı : WordPress için eklenti yazmak…-4

Selametle

9 thoughts on “WordPress için eklenti yazmak…-2”

  1. üstad çok güzel anlatmışsın.işime yarayacak.çok teşekkür ederim.

  2. Tamda aradağım yazı dizisi. WordPress eklentilerini yazmaya merak sarmıştım açıkcası WP ile pek haşir naşir değilim sadece mantığını kavramak için biraz araştırma yaparken sitenize rastladım. Güzel ve anlaşılır bir anlatım olmuş. Tebrik ederim.

  3. /* Direkt Çağrıları Engelleyelim */ altındakı kod local’de çalışmıyor direk wordpress blog sayfasına die içindeki mesjı basıyor ekrana bilginize.

    1. Ahmet,

      Bahsettiğin kod zaten dosyana direkt olarak erişmeye çalışanları kısıtlamak için. Yani sitende WordPress altyapısı hariç sen tarayıcıdan erişmeye çalıştığında bastığı şey doğru. die() içindeki yazıyı görüyorsan işlevsel olarak doğru çalışıyor demektir. Local için birşey diyemem.

  4. eklentim_fonks() nun için ufak bir yazım hatası var.
    <input type="submit" id="submit" name="submit" value="”>
    birtane “/” fazla olmuş o yüzden hata veriyor.

    Hocam düzeltebilirmisiniz.
    <input type="submit" id="submit" name="submit" value="”>

    Ellerinize sağlık bu arada baya faydalı ve açıklayıcı olmuş. sağolun.

Comments are closed.