Berkant AYDIN

Hayalgücü bilgiden üstündür.

Wordpress Eklenti Yazarlığı – Örnek: Karalama Defteri

  • Cumartesi Eki 31,2009 04:08 AM
  • yazar: Berkant Aydin
  • kategori: Wordpress

wordpressSizler için hızlıca, db kullanan basit bir eklenti hazırladım. Wordpress Eklenti Yazarlığı konusunda aklınızdaki soru işaretlerinin çoğunu ortadan kaldıracaktır.


<?php

/*

Plugin Name: Karalama Defteri

Plugin URI: http://www.snowbattle.com

Description: Sisteminize kişisel notlar ekleyebileceğiniz, üyelerinize kişisel notlar ekletebileceğiniz bir karalama defteri ekler.

Author: Berkant AYDIN

Version: 1.0.

Author URI: http://www.snowbattle.com/

*/

/* Create Database - Veritabani Olusturma */

$wpdb->kd = $wpdb->prefix . 'karalamadefteri';

/*

Tablomuzun adi KaralamaDefteri olup, bunu $wpdb isimli

WP'nin veritabani sinifina $wpdb->kd olarak tanitiyoruz

*/

function karalama_defteri_kurulum() {

/* Kurulum islemini yapacak olan fonksiyonumuz, ismini istediğiniz gibi verebilirsiniz */

global $wpdb;

/* $wpdb adli  WP'nin veritabani sinifini fonksiyonumuza cağiriyoruz. Fonksiyonlarimizda veritabani islemleri yapmak icin bunu

yapmamiz gerekiyor */

$db_sql="CREATE TABLE IF NOT EXISTS ".$wpdb->kd." (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`id_user` bigint(20) NOT NULL,

`n_baslik` varchar(255) NOT NULL,

`n_icerik` text NULL,

`t_ekleme` datetime,

PRIMARY KEY  (`id`)

)";

/* Tablomuzu olusturacak SQL ifadesi */

$wpdb->query($db_sql);

/* SQL ifademizi calistiriyoruz */

}

if (isset($_GET['activate']) &amp;&amp; $_GET['activate'] == 'true') {

/* Eğer kullanici "Etkinlestir" bağlantisina tikladiysa, "karalama_defteri_kurulum" fonksiyonunu cağir */

add_action('init', 'karalama_defteri_kurulum');

}

/* Admin Panel - Yonetim Paneli Olusturma */

/*

add_submenu_page(ana_menü_dosya_adi, alt_menü_sayfa_basliği, alt_menü_basliği, yetki_düzeyi, eklenti_dosyasinin_adi,

menü_basliğina_tiklandiğinda_cağirilacak_fonksiyon)

ana_menü_dosya_adi olarak post-new.php (Yaz), edit.php (Yönet), edit-comments.php (Yorumlar), link-manager.php (Bağlantilar),

themes.php (Görünüm), plugins.php (Eklentiler), users.php (Kullanicilar), options-general.php (Tercihler) dosya adlarini

kullanabilirsiniz.

yetki_düzeyi, bu menüyü kullanabilecek yöneticinin yetki düzeyini belirler ki 10 en yüksek düzeydir. Detayli level bilgisi icin

(http://codex.wordpress.org/User_Levels). eklenti_dosyasinin_adi, menüye tiklandiğinda cağirilacak dosyayi belirler, bu

parametreyi yönetim islemlerini ayri dosyada halletmek icin de kullanabiliriz, böylece eklentimizi parcalayarak kücük dosyalar

haline getirebiliriz (bu fikir simdi aklima geldi, gercekten de iyi olacaktir) ancak biz __FILE__ ifadesi ile menünün olusturulduğu

dosyayi fonksiyona bildirmis olduk.

*/

add_action('admin_menu', 'yonetime_ekle');

function yonetime_ekle() {

add_submenu_page('post-new.php', 'Karalama Defteri', 'Karalama Defteri', 3, __FILE__, 'kd_menu');

}

function kd_menu() {

global $wpdb, $user_id;

/* Veritabanini kullanacağimiz icin $wpdb sinifini global olarak tanimliyoruz, $user_ID kendinden tanimli halde wp ile geliyor. */

echo '<div>';

/* wrap isimli stil klasi yönetim panelindeki icerik bölümünü gösteriyor */

if ($_POST['islem']== 'ekle') { kd_ekle (); }

if ($_GET['islem']== 'sil') { kd_sil (); }

if ($_POST['islem']== 'duzenle') { kd_duzenle (); }

/*

Yukaridaki kontroller ile POST ya da GET'den gelen "islem" değiskeninin

değerine göre ilgili islemi yapacak fonksiyonlara dallaniyoruz

*/

$sorgu = "SELECT * FROM $wpdb->kd where id_user='$user_id' order by id desc";

$sonuclar = $wpdb->get_results($sorgu);

/*

Kayitlari listelemek icin veritabanindan aliyoruz. Ve asağidaki kodlarla

düzenli liste seklinde bir liste olusturuyor, kayitlarin sonlarina da

islem yapacak linkleri ekliyoruz.

*/

if ($sonuclar) {

echo "<strong>Kayitlar:</strong>";

echo '<table width="%100" style="border:1px #000000 solid">';

echo "<tr><td>ID</td><td>Baslik</td><td>Icerik</td><td>Eklendi</td><td></td><td></td></tr>";

foreach ($sonuclar as $sonuc) {

$id=stripslashes($sonuc->id);

$baslik=stripslashes($sonuc->n_baslik);

$icerik=stripslashes($sonuc->n_icerik);

$t_ekleme=stripslashes($sonuc->t_ekleme);

echo "<tr><td width='%10' style='border:1px #000000 solid; text-align:right;'>";

echo $id;

echo "</td><td width='%15' style='border:1px #000000 solid'>";

echo $baslik;

echo "</td><td width='%25' style='border:1px #000000 solid'>";

echo substr($icerik,3,40)."...";

echo "</td><td width='%15' style='border:1px #000000 solid; text-align:right;'>";

echo $t_ekleme;

echo "</td><td width='%7' style='border:1px #000000 solid; text-align:center;'>";

echo "[<a href='".$_SERVER['PHP_SELF']."?page=karalama_defteri.php&amp;degistir=".$id."'>Duzenle</a>]";

echo "</td><td width='%5' style='border:1px #000000 solid; text-align:center;'>";

echo "[<a href='".$_SERVER['PHP_SELF']."?page=karalama_defteri.php&amp;islem=sil&amp;silno=".$id."'>Sil</a>]";

echo "</td></tr>";

}

echo "</table>";

} else { echo "Hic Kayit bulunamadi!"; }

/* Eğer düzenleme islemi yapilmak istenmemisse bos bir metin kutusu olusturuyoruz */

if (!isset($_GET['degistir'])) {

/* Değistir Denilmemisse */

?>

<form action="<?php $_SERVER['PHP_SELF'] ?>?page=karalama_defteri.php" method="post">

<fieldset>

<table width="600">

<tr>

<td>

</td>

<td>

<input type="hidden" name="id" value="" /><td>

</tr>

<tr>

<td>

Baslik

</td>

<td>

<input type="text" name="baslik" value="" />

</td>

</tr>

<tr>

<td>

Icerik

</td>

<td>

<textarea name="icerik" cols="40" rows="10"></textarea>

</td>

</tr>

<tr>

<td>

</td>

<td>

<input type="hidden" name="islem" value="ekle" />

<input type="submit" name="submit" value="Kaydet" />

</td>

</tr>

</table>

</fieldset>

</form>

<?php

}

else

{

$sorgu = "SELECT * FROM $wpdb->kd where id='$_GET[degistir]' AND id_user='$user_id' limit 1";

$sonuclar = $wpdb->get_results($sorgu);

if ($sonuclar) {

foreach ($sonuclar as $sonuc) {

$id=stripslashes($sonuc->id);

$baslik=stripslashes($sonuc->n_baslik);

$icerik=stripslashes($sonuc->n_icerik);

$deger=stripslashes($sonuc->n_deger);

}

}

?>

<form action="<?php $_SERVER['PHP_SELF'] ?>?page=karalama_defteri.php" method="post">

<fieldset>

<table width="400">

<tr>

<td>

</td>

<td>

<input type="hidden" name="id" value="<? echo $id; ?>" />

<td>

</tr>

<tr>

<td>

Baslik

</td>

<td>

<input type="text" name="baslik" value="<? echo $baslik; ?>" />

</td>

</tr>

<tr>

<td>

Icerik

</td>

<td>

<textarea name="icerik" cols="40" rows="10"><? echo $icerik ?></textarea>

</td>

</tr>

<tr>

<td>

Deger

</td>

<td>

<input type="text" name="deger" value="<? echo $deger ?>" />

</td>

</tr>

<tr>

<td>

</td>

<td>

<input type="hidden" name="islem" value="duzenle" />

<input type="submit" name="submit" value="Kaydet" />

</td>

</tr>

</table>

</fieldset>

</form>

<?

}

echo "</div>";

}

/* kd_menu Fonksiyon Sonu */

/* Yeni - New */

function kd_ekle (){

global $wpdb, $user_id;

/*

Asağidaki kod ile POST'dan gelen verileri mySQL acisindan zararsiz hale getiriyoruz

Sayisal verilerde ise (int) ifadesi ile zararsiz hale getirebiliyoruz.

*/

$baslik=$wpdb->escape($_POST['baslik']);

$icerik=$wpdb->escape($_POST['icerik']);

$sql= "INSERT INTO ".$wpdb->kd." VALUES (NULL,'".$user_id."','".$baslik."','".$icerik."', now())";

$wpdb->query($sql);

//Asağidaki koddaki "updated fade" klasi uyari mesajlarina fade efekti uyguluyor.

?>

<div id="message"><p>Yeni kayit eklendi! </p></div>

<?php

}

//Sil-Delete

function kd_sil () {

global $wpdb, $user_id;

$sql="DELETE FROM ".$wpdb->kd." WHERE id='".(int) $_GET['silno']."' AND id_user='$user_id'";

$sonuc=$wpdb->query($sql);

?>

<div id="message"><p><strong>Kayit silindi!</strong></p></div>

<?php

}

//Edit - Düzenle

function kd_duzenle () {

global $wpdb, $user_id;

$baslik=$wpdb->escape($_POST['baslik']);

$icerik=$wpdb->escape($_POST['icerik']);

$sql="UPDATE ".$wpdb->kd." SET n_baslik='".$baslik."', n_icerik='".$icerik."' where id='". (int) $_POST['id']."' AND

id_user='$user_id'";

$wpdb->query($sql);?>

<div id="message"><p><strong>Kayit duzenlendi!</strong> </p></div>

<?php

}

?>

Görüşmek üzere…

, , , ,



Yorum Bırakın




XHTML: Şu tagları kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

RSS Beslemesi

Etiket Bulutu

Facebox Fan Box

Sponsor Bağlantılar