Kateogri: WordPress

WordPress Yazı Alanına Metabox Nasıl Eklerim?

Merhaba arkadaşlar, bugün ne yazsam ne yazsam diye düşünürken aklıma geldi metabox ile ilgili yazı yazayım.

Evet gelelim Metabox’ı yazımıza nasıl ekleriz.

1. Adım:

İlk önce functions.php‘yi açıyoruz ve <?php tagından hemen sonra aşağıdaki kodu yazarak metabox.php‘yi çağırıyoruz.

include_once("metabox.php");

2. Adım:

Notepad++(Siz hangi kod editörünü kullanıyorsanız onu açın) açıyoruz ve aşağıdaki kodları yapıştırıp metabox.php olarak temanın bulunduğu klasöre kaydediyoruz.

/*
 * Plugin Name: Metabox
 * Author: Burak Şahin
 * Author URI: http://buraksah.in/
 */

$prefix = 'ozellikler_'; 

$meta_box = array(
 'id' => 'my-meta-box',
 'title' => 'Custom meta box',
 'page' => 'post',
 'context' => 'normal',
 'priority' => 'high',
 'fields' => array(
 array(
 'name' => 'Text box',
 'desc' => 'Enter something here',
 'id' => $prefix . 'text',
 'type' => 'text',
 'std' => 'Default value 1'
 ),
 array(
 'name' => 'Textarea',
 'desc' => 'Enter big text here',
 'id' => $prefix . 'textarea',
 'type' => 'textarea',
 'std' => 'Default value 2'
 ),
 array(
 'name' => 'Select box',
 'id' => $prefix . 'select',
 'type' => 'select',
 'options' => array('Option 1', 'Option 2', 'Option 3')
 ),
 array(
 'name' => 'Alt Yazı Seçeneği',
 'id' => $prefix . 'dil',
 'type' => 'radio',
 'options' => array(
 array('name' => 'Alt Yazısız ', 'value' => 'altyazisiz'),
 array('name' => 'Alt Yazılı ', 'value' => 'turkcealtyazi')
 )
 ),
 array(
 'name' => 'Video Kalitesi',
 'id' => $prefix . 'videokalitesi',
 'type' => 'radio',
 'options' => array(
 array('name' => '240p ', 'value' => 'p240p'),
 array('name' => '360p ', 'value' => 'p320p'),
 array('name' => '720p ', 'value' => 'p720p'),
 array('name' => '1080p ', 'value' => 'p1080p')
 )
 ), 

 array(
 'name' => 'Checkbox',
 'id' => $prefix . 'checkbox',
 'type' => 'checkbox'
 )
 )
); 

add_action('admin_menu', 'mytheme_add_box'); 

// Add meta box
function mytheme_add_box() {
 global $meta_box; 

 add_meta_box($meta_box['id'], $meta_box['title'], 'mytheme_show_box', $meta_box['page'], $meta_box['context'], $meta_box['priority']);
} 

// Callback function to show fields in meta box
function mytheme_show_box() {
 global $meta_box, $post; 

 // Use nonce for verification
 echo '<input type="hidden" name="mytheme_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />'; 

 echo '<table class="form-table">'; 

 foreach ($meta_box['fields'] as $field) {
 // get current post meta data
 $meta = get_post_meta($post->ID, $field['id'], true); 

 echo '<tr>',
 '<th style="width:20%"><label for="', $field['id'], '">', $field['name'], '</label></th>',
 '<td>';
 switch ($field['type']) {
 case 'text':
 echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:97%" />',
 '<br />', $field['desc'];
 break;
 case 'textarea':
 echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="4" style="width:97%">', $meta ? $meta : $field['std'], '</textarea>',
 '<br />', $field['desc'];
 break;
 case 'select':
 echo '<select name="', $field['id'], '" id="', $field['id'], '">';
 foreach ($field['options'] as $option) {
 echo '<option', $meta == $option ? ' selected="selected"' : '', '>', $option, '</option>';
 }
 echo '</select>';
 break;
 case 'radio':
 foreach ($field['options'] as $option) {
 echo '<input type="radio" name="', $field['id'], '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' />', $option['name'];
 }
 break;
 case 'checkbox':
 echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />';
 break;
 }
 echo '<td>',
 '</tr>';
 } 

 echo '</table>';
} 

add_action('save_post', 'mytheme_save_data'); 

// Save data from meta box
function mytheme_save_data($post_id) {
 global $meta_box; 

 // verify nonce
 if (!wp_verify_nonce($_POST['mytheme_meta_box_nonce'], basename(__FILE__))) {
 return $post_id;
 } 

 // check autosave
 if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
 return $post_id;
 } 

 // check permissions
 if ('page' == $_POST['post_type']) {
 if (!current_user_can('edit_page', $post_id)) {
 return $post_id;
 }
 } elseif (!current_user_can('edit_post', $post_id)) {
 return $post_id;
 } 

 foreach ($meta_box['fields'] as $field) {
 $old = get_post_meta($post_id, $field['id'], true);
 $new = $_POST[$field['id']]; 

 if ($new && $new != $old) {
 update_post_meta($post_id, $field['id'], $new);
 } elseif ('' == $new && $old) {
 delete_post_meta($post_id, $field['id'], $old);
 }
 }
}

Şimdi yazı ekleme sayfasına girdiğimizde aşağıdaki gibi bir tablo karşımıza gelcektir.

3. Adım:

Geldik son adımımıza. Bu adımda metaboxa yazılan yazıyı nasıl çağıracağımızı göstereceğiz. Aşağıda verdiğim kodu metaboxdaki veriyi nereye çekmek istiyorsanız oraya yazın.

<?php  if (get_post_meta($post->ID, 'ozellikler_dil', true)) : ?>  // Eğer if döngüsü kullanacaksak yazıyoruz
<?php  echo get_post_meta($post->ID, 'ozellikler_dil', true) ?> // Metaboxu çekecek olan kod
<?php  endif; ?> // İf döngüsünü kullandıysak kapatıyoruz

Gelelim Kodları Tanımaya:

ilk kodumuzu örnek olarak alacak olursak;

array(
'name' => 'Text box',
'desc' => 'Enter something here',
'id' => $prefix . 'text',
'type' => 'text',
'std' => 'Default value 1'
),

Detaylara girecek olursak;
‘id’ => $prefix . ‘text’, incelediğimiz zaman buradaki text metaboxda tek olmalıdır. Yani eğer biz Youtube Video URL’sini bu metin kutusundan çekeceksek text yerine youtube yazmalıyız. Hatırlaması kolay ve tek olacaktır.

‘type’ özelliğini inceleyecek olursak buradaki;
text = tek satırlık metin kutusu
textare = metin alanı
radio = tek seçim yapmamızı sağlayan tip
select = açılır kutu

 

Hata alan arkadaşlar için kullanmış olduğum metabox.php dosyasını paylaşıyorum.

Metabox Dosyasını İndir

Yukarıda ki metabox dosyasını indirdikten sonra metabox.txt ismini metabox.php olarak değiştirin.

Burak Şahin

Merhaba! Ben Burak. 2016 yılında Karadeniz Teknik Üniversitesi Harita Mühendisliği Bölümü’nden mezun oldum. Lise yıllarında HTML & CSS‘e, Üniversite yıllarında WordPress ve Matlab‘e adım attım. Lisans tezimi Matlab üzerinden program yazarak teslim ettim. Çeşitli projeler için WordPress tabanlı yazılımlar geliştirdim.

Paylaş
Yazar
Burak Şahin

Son içerikler

MAMP / WAMP / XAMPP phpMyAdmin Şifresi Değiştirme (2 Adım)

Genellikle Windows ve Mac OS işletim sistemli bilgisayarlarda WordPress tema geliştiricileri localhost kurulumu yapmak için…

10 ay önce

WordPress Admin Şifresi Değiştirme (3 Farklı Yöntem)

Her birey zaman zaman şifrelerini güncellemelidir. WordPress yönetici şifresini değiştirmek oldukça basit bir işlemdir, ancak…

10 ay önce

En İyi 4 Ücretsiz WordPress Emlak Teması

Emlak temaları hakkında daha fazla bilgi edinmek için sizleri ücretsiz WordPress emlak teması serimize davet…

10 ay önce

En iyi 18 ücretsiz kurumsal WordPress teması

Markanız için bir site oluşturmak istiyorsanız en iyi ücretsiz kurumsal WordPress teması seçeneklerine bakabilir ve…

2 yıl önce

5 Adımda Cloudflare ile WordPress Güvenliğini Artırma

Cloudflare ile WordPress güvenliğini artırma çalışmasından önce kısaca size Cloudflare'i neden tercih ettiğimden bahsedeyim. Cloudflare'in…

4 yıl önce

Bitcoin’in Nabzı Burada Atıyor

Son zamanların en gözde yatırım araçlarının başında kripto paralar geliyor. Bir anda yükselişe geçmesi ve…

5 yıl önce

Bu web sitesinde çerezler kullanılıyor.