WordPress

WordPress Tema Paneli Yapımı

Birkaç hafta önce temamda bir değişikliğe gittim. Orjinali arthemia olan kendi düzenlediğim bu temayı kullanmaya başladım. Temayı kullanmadan önce çoğu şey manuel olarak gerek single.php de gerek index.php de vs. düzenlenmesi gerekiyordu. Bu temaya bir panel olsa çok güzel olur düşüncesiyle panel yapımı aramaya başladım. Öncelikle burada Beyazıt abinin anlatımını buldum. Daha sonra yabancı bir sitede başka bir anlatım daha buldum. Beyazıt abinin anlatımı çok iyi ve o panelde hiç bir sıkıntı yaşamadım. Benim anlatacağım ise biraz daha kolay hazırlanması. Yalnız tek sıkıntıyla karşılaştım. Oda çift tırnak sorunu. Bir türlü düzeltemedim. :) Fazla uzatmadan anlatıma geçeyim.

Tema Paneli Ne İşe Yarar?

Yukarıda da bahsettiğim gibi bizim tema dosyalarını oynayarak manuel olarak yapacağımız işleri kolaylaştırıp direk tema paneli üzerinden ayarlayabiliriz. Mesela sidebarda reklam alanınız var fakat siz bunu her seferinde sidebar.php ye girip kodları düzelterek ayarlıyorsunuz. Bundan sonra panel üzerinden kodlarla uğraşmadan ayarlama yapabileceksiniz.

Kurulum Aşaması

Öncelikler functions.php dosyamızın php tagları arasına aşağıdaki kodu ekliyoruz.

if (file_exists(TEMPLATEPATH.'/temapaneli.php')) include_once("temapaneli.php");

Bu kod sayesinde temapaneli.php dosyamızı çağırdık. Şimdi gelelim panel kodlarına.

<?php
 
function mytheme_add_init() {
 
$file_dir=get_bloginfo('template_directory');
wp_enqueue_style("functions", $file_dir."/temapanel/temapanel.css", false, "1.0", "all");
wp_enqueue_script("rm_script", $file_dir."/temapanel/rm_script.js", false, "1.0");
 
}
 
$themename = "Usluer";
$shortname = "er";
 
$categories = get_categories('hide_empty=0&orderby=name');
$wp_cats = array();
foreach ($categories as $category_list ) {
$wp_cats[$category_list->cat_ID] = $category_list->cat_name;
}
array_unshift($wp_cats, "Kategori Seçiniz");
 
$options = array (
 
array( "name" => $themename." Options",
"type" => "title"),
 
array( "name" => "Genel Ayarlar",
"type" => "section"),
array( "type" => "open"),
 
array( "name" => "Logo Url",
"desc" => "Logonuzun adresini buraya yazınız.",
"id" => $shortname."_logo",
"type" => "text",
"std" => ""),
 
array( "name" => "Favicon Url",
"desc" => "Favicon adresini buraya yazınız.",
"id" => $shortname."_favicon",
"type" => "text",
"std" => ""),
 
array( "name" => "Twitter Kutusu",
"desc" => "Eğer Eveti seçerseniz reklam banneri yerine son twitiniz gözükür.",
"id" => $shortname."_twitter_kutusu",
"type" => "select",
"options" => array("Evet", "Hayır"),
"std" => ""),
 
array( "name" => "Twitter Kullanıcı Adı",
"desc" => "Twitter kullanıcı adını yazınız.",
"id" => $shortname."_twitter_kadi",
"type" => "text",
"std" => ""),
 
array( "type" => "close"),
 
);
 
function mytheme_add_admin() {
 
global $themename, $shortname, $options;
 
if ( $_GET['page'] == basename(__FILE__) ) {
 
if ( 'save' == $_REQUEST['action'] ) {
 
foreach ($options as $value) {
update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }
 
foreach ($options as $value) {
if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ]  ); } else { delete_option( $value['id'] ); } }
 
header("Location: admin.php?page=temapaneli.php&saved=true");
 
}
 
else if( 'reset' == $_REQUEST['action'] ) {
 
foreach ($options as $value) {
delete_option( $value['id'] ); }
 
header("Location: admin.php?page=temapaneli.php&reset=true");
 
}
}
 
add_menu_page($themename, $themename, 'administrator', basename(__FILE__), 'mytheme_admin');
}
 
function mytheme_admin() {
 
global $themename, $shortname, $options;
$i=0;
 
?>
<div class="wrap rm_wrap">
<h2><?php echo $themename; ?> Ayarlar</h2>
 
<div class="rm_opts">
<form method="post">
<?php foreach ($options as $value) {
switch ( $value['type'] ) {
 
case "open":
?>
 
<?php break;
 
case "close":
?>
 
</div>
</div>
<br />
 
<?php break;
 
case "title":
?>
<p><?php echo $themename;?> tema yönetim paneline hoşgeldiniz.</p>
 
<?php break;
 
case 'text':
?>
 
<div class="rm_input rm_text">
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label>
<input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_settings( $value['id'] ) != "") { echo stripslashes(get_settings( $value['id'])  ); } else { echo $value['std']; } ?>" />
<small><?php echo $value['desc']; ?></small><div class="clearfix"></div>
 
</div>
<?php
break;
 
case 'textarea':
?>
 
<div class="rm_input rm_textarea">
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label>
<textarea name="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" cols="" rows=""><?php if ( get_settings( $value['id'] ) != "") { echo stripslashes(get_settings( $value['id']) ); } else { echo $value['std']; } ?></textarea>
<small><?php echo $value['desc']; ?></small><div class="clearfix"></div>
 
</div>
 
<?php
break;
 
case 'select':
?>
 
<div class="rm_input rm_select">
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label>
 
<select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
<?php foreach ($value['options'] as $option) { ?>
<option <?php if (get_settings( $value['id'] ) == $option) { echo 'selected="selected"'; } ?>><?php echo $option; ?></option><?php } ?>
</select>
 
<small><?php echo $value['desc']; ?></small><div class="clearfix"></div>
</div>
<?php
break;
 
case "checkbox":
?>
 
<div class="rm_input rm_checkbox">
<label for="<?php echo $value['id']; ?>"><?php echo $value['name']; ?></label>
 
<?php if(get_option($value['id'])){ $checked = "checked="checked""; }else{ $checked = "";} ?>
<input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> />
 
<small><?php echo $value['desc']; ?></small><div class="clearfix"></div>
</div>
<?php break;
case "section":
 
$i++;
 
?>
 
<div class="rm_section">
<div class="rm_title"><h3><img src="<?php bloginfo('template_directory')?>/temapanel/images/trans.gif" class="inactive" alt="""><?php echo $value['name']; ?></h3><span class="submit"><input name="save<?php echo $i ?>" type="submit" value="Kaydet" />
</span><div class="clearfix"></div></div>
<div class="rm_options">
 
<?php break;
 
}
}
?>
 
<input type="hidden" name="action" value="save" />
</form>
<form method="post">
<p class="submit">
<input name="reset" type="submit" value="Ayarları Sıfırla" />
<input type="hidden" name="action" value="reset" />
</p>
</form>
<div style="font-size:9px; margin-bottom:10px;"><a href="https://usluer.net">İsmail Usluer</a> tarafından hazırlanmıştır.</div>
</div>
 
<?php
}
?>
<?php
add_action('admin_init', 'mytheme_add_init');
add_action('admin_menu', 'mytheme_add_admin');
?>

Bu kodları metin belgesine veya herhangi bir yazım editörüne yapıştıralım. Ve düzenlememiz gereken yerleri düzenleyelim. 11 ve 12. satırlarda Usluer ve er yazmakta. Buradaki Usluer panel ismidir. er ise panel isminin kısa yazımıdır ve bu er önemlidir. Tema dosyalarına yazacağımız kontrollerde kullanacağız. Burada sadece bir kısım oluşturulmuş. Siz 25 ve 55. satırlar arasını kopyalayıp (25 ve 55. satırlar dahil) 55. satırın altına yapıştırıp düzenlediğinizde yeni kısımlar oluşturabilirsiniz. Tabi bunlar için çok fazla olmasada kod bilgisine ihtiyacınız vardır. Hiçbirşey bilmeyen biri bunları yapmakta zorlanacaktır.

Gereken yerleri düzenledikten sonra temapaneli.php olarak kaydediyoruz. Daha önceden de functions.php dosyamıza bir satır eklemiştik. functions.php ve temapaneli.php yi tema klasörümüzün içine atıyoruz. Admin panelimize girip tema panelini çalıştırdığımızda hiç hoş bir görüntü çıkmayacak karşımıza. Çünkü css ve js dosyalarını atmadık. :) Bu dosyaları yazımın sonunda paylaşacağım.

Panelin Temada Kullanılması

Mesela bir kontrole bağlı olarak ekrana panelden ayarladığımız bir metni yazdıralım.

<?php if (get_option('er_twitter_kutusu')=='Evet') {
echo get_option('er_twitter_kadi');
} ?>

Burada her iki seçeneği de anlatmaya çalıştım. Yaptığımız işlem ise çok basit. Eğer er_twitter_kutusu id’li combobox Evet ise er_twitter_kadi id`li metni ekrana yazdır. Buradaki er yukarıda da belirttiğim gibi panel isminin kısa yazımıdır.

Sonuç

WordPress temamız nasıl panelden kontrol edilir azda olsa bir fikir sahibi olduğumuzu düşünüyorum. Biraz üstünde durarak yarım saatte basit bir panel yapabilirsiniz. Merak ettiğiniz veya takıldığınız yerleri buradan bana sorarsanız elimden geldiğince yardım ederim.

Dosyalar

Buradan indirebilirsiniz. Zip’den çıkan dosyaları olduğu gibi tema klasörüne atınız.

Kendi panel demomu da buradan izleyebilirsiniz.

Panel ile reklam vs. gösteriminde sorun yaşayanlar okusun!

Aşağıdakileri temapaneli.php dosyasında değil, içeriği temada çağırırken yapacağız.

<?php echo stripslashes(get_option('id')); ?>

Yukarıda görüldüğü gibi içeriği temada çağırırken başına stripslashes(); getirilirse sorun çözülecektir.

Bana kahve ısmarlamak ister misin?

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

89 Yorum
  1. Kudret Çayıroğlu
    17 Mart 2011 - 14:12
    Cevapla
  2. aslan
    1 Nisan 2011 - 09:51
    Cevapla
  3. tamer
    24 Nisan 2011 - 03:25
    Cevapla
    • Usluer
      24 Nisan 2011 - 03:55
      Cevapla
  4. tarik menteşe
    17 Haziran 2011 - 10:46
    Cevapla
  5. lopinet
    18 Ağustos 2011 - 17:53
    Cevapla
    • Usluer
      18 Ağustos 2011 - 18:34
      Cevapla
  6. Yusuf
    3 Eylül 2011 - 16:41
    Cevapla
    • Usluer
      3 Eylül 2011 - 18:24
      Cevapla
  7. hakan
    28 Eylül 2011 - 23:42
    Cevapla
    • Usluer
      28 Eylül 2011 - 23:46
      Cevapla
  8. hakan
    29 Eylül 2011 - 08:41
    Cevapla
  9. Rousso
    2 Ekim 2011 - 12:12
    Cevapla
    • Usluer
      2 Ekim 2011 - 12:19
      Cevapla
  10. İsmail Görkem Kara
    8 Ekim 2011 - 01:06
    Cevapla
  11. ahmet
    29 Ekim 2011 - 21:44
    Cevapla
  12. ~YİĞİT~
    30 Ekim 2011 - 12:22
    Cevapla
    • fragmantv
      16 Ocak 2012 - 02:30
      Cevapla
      • Usluer
        16 Ocak 2012 - 15:25
        Cevapla
  13. Onur
    11 Aralık 2011 - 00:32
    Cevapla
    • Usluer
      11 Aralık 2011 - 09:21
      Cevapla
      • Onur
        11 Aralık 2011 - 15:05
        Cevapla
  14. Batuhan Küçükali
    11 Aralık 2011 - 02:02
    Cevapla
  15. Ozgun Atik
    25 Aralık 2011 - 11:07
    Cevapla
  16. ziver
    26 Aralık 2011 - 00:48
    Cevapla
  17. İsmail Görkem Kara
    26 Ocak 2012 - 10:40
    Cevapla
  18. TahsinSUNGUR
    26 Şubat 2012 - 12:18
    Cevapla
  19. techvadi
    29 Mart 2012 - 10:24
    Cevapla
  20. Muhammed Kurum
    25 Nisan 2012 - 10:33
    Cevapla
    • Usluer
      25 Nisan 2012 - 11:53
      Cevapla
  21. Ferdi
    18 Mayıs 2012 - 16:06
    Cevapla
    • Usluer
      18 Mayıs 2012 - 16:26
      Cevapla
  22. caner
    30 Mayıs 2012 - 01:49
    Cevapla
    • Usluer
      31 Mayıs 2012 - 09:27
      Cevapla
  23. ndr62
    12 Temmuz 2012 - 16:50
    Cevapla
    • Usluer
      12 Temmuz 2012 - 19:00
      Cevapla
      • ndr62
        12 Temmuz 2012 - 20:10
        Cevapla
        • Usluer
          12 Temmuz 2012 - 23:29
        • ndr62
          13 Temmuz 2012 - 16:52
        • Usluer
          13 Temmuz 2012 - 17:20
  24. Samet
    14 Ağustos 2012 - 07:08
    Cevapla
  25. Gatmer
    31 Ağustos 2012 - 12:47
    Cevapla
  26. Barış
    8 Kasım 2012 - 20:29
    Cevapla
    • Usluer
      9 Kasım 2012 - 00:37
      Cevapla
  27. Volkan A.
    22 Kasım 2012 - 15:06
    Cevapla
  28. serhat
    8 Aralık 2012 - 20:17
    Cevapla
    • Usluer
      8 Aralık 2012 - 21:20
      Cevapla
  29. serhat
    10 Aralık 2012 - 16:06
    Cevapla
    • Usluer
      10 Aralık 2012 - 17:03
      Cevapla
  30. serhat
    11 Aralık 2012 - 01:21
    Cevapla
    • Usluer
      11 Aralık 2012 - 15:25
      Cevapla
  31. serhat
    13 Aralık 2012 - 15:35
    Cevapla
  32. serhat
    15 Aralık 2012 - 19:40
    Cevapla
  33. serhat
    23 Aralık 2012 - 00:20
    Cevapla
  34. hayrettin
    30 Nisan 2013 - 11:05
    Cevapla
    • Usluer
      30 Nisan 2013 - 11:11
      Cevapla
      • hayrettin
        30 Nisan 2013 - 19:21
        Cevapla
        • Usluer
          30 Nisan 2013 - 20:41
  35. SPoyraz
    25 Haziran 2013 - 17:14
    Cevapla
    • Usluer
      25 Haziran 2013 - 17:25
      Cevapla
  36. batuhan
    10 Şubat 2014 - 21:20
    Cevapla
  37. Burak
    10 Mart 2014 - 03:30
    Cevapla
  38. Zekican09
    24 Mayıs 2014 - 19:49
    Cevapla
  39. Zekican09
    24 Mayıs 2014 - 20:33
    Cevapla
  40. Serdar
    5 Temmuz 2014 - 01:08
    Cevapla
  41. Nazım Yılmaz
    23 Aralık 2014 - 12:14
    Cevapla
    • Usluer
      23 Aralık 2014 - 12:24
      Cevapla
      • Nazım Yılmaz
        23 Aralık 2014 - 12:34
        Cevapla
        • Usluer
          23 Aralık 2014 - 12:38
  42. Nazım Yılmaz
    23 Aralık 2014 - 13:04
    Cevapla
  43. Nazım Yılmaz
    23 Aralık 2014 - 14:37
    Cevapla
  44. hüseyin
    9 Kasım 2015 - 19:41
    Cevapla
    • Usluer
      10 Kasım 2015 - 09:47
      Cevapla
  45. Erşen MUSLU
    14 Ocak 2016 - 14:30
    Cevapla
    • Usluer
      15 Ocak 2016 - 08:04
      Cevapla
    • Ali
      19 Kasım 2016 - 17:56
      Cevapla
  46. Sercan
    21 Ocak 2016 - 15:36
    Cevapla
    • Usluer
      22 Ocak 2016 - 10:37
      Cevapla
      • Sercan
        22 Ocak 2016 - 11:01
        Cevapla
  47. Yakup
    24 Ocak 2016 - 21:46
    Cevapla
    • Usluer
      24 Ocak 2016 - 23:48
      Cevapla
  48. Mustafa DEMİR
    27 Haziran 2016 - 14:19
    Cevapla
    • Usluer
      29 Haziran 2016 - 17:11
      Cevapla
  49. serkan
    17 Ekim 2017 - 17:26
    Cevapla
    • Usluer
      17 Ekim 2017 - 19:10
      Cevapla