WordPress MetaBox Kullanımı

Merhaba arkadaşlar bu makalede size yararlı olabileceği husunda hem fikir olduğum konuyu ele alacağım. Bu MetaBox hakkında daha düne kadar hiç bir bilgim yok iken Yılmaz Usta’m Sağolsun bana önerisi ile bilgi sahibi olmamı sağladı buradan teşekkürlerimi iletiyorum ☺ .

Blog-Kursad-WordPress MetaBoxEvet Metabox nedir onu anlatalım isterseniz;
Bu Metabox denilen velinimet bildiğiniz üzere eskiden Özel alan ile yazıda ek değerler girip kullanıcıya daha çok seçenekler sunabiliyorduk ve buda CPU kullanımını daha da artırıp site hızına da etken yaratabiliyordu Metabox ta Özel alan a benzer bir mantık ile işliyor diyebiliriz ama daha hızlı ve efektif sistem sunuyor kullanım anlamında.

Yazı eklerken yazı yazdığımız alanın altında böyle bir panel karşılıyor bizi bu paneli kendimiz artık düzenleyip rahat bir şekilde kullanım sağlayabileceğiz.

WordPress MetaBox Ekleme WpAJANS

Öncelikle Yaptığımız tema klasöründe functions.php dosyamıza aşağıdaki kodlarımızı ekliyoruz.

<?
$prefix = ‘getir_’;
$meta_box = array(
    ‘id’ => ‘my-meta-box’,
    ‘title’ => ‘Custom meta box’,
    ‘page’ => ‘post’,
    ‘context’ => ‘normal’,
    ‘priority’ => ‘high’,
    ‘fields’ => array(
        array(
            ‘name’ => ‘Kısa Tanıtım’,
            ‘desc’ => ‘Buraya kısa tanıtım hakkında açıklama girilip detaylı açıklama bölümü yapabilirsiniz.’,
            ‘id’ => $prefix . ‘kisa_tanitim’,
            ‘type’ => ‘text’
        )
    )
);
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);
        }
    }
}  
?>

Evet yukarıdaki kodu ekledeğimize göre bir kısıma açıklık getirelim.

array(
            ‘name’ => ‘Kısa Tanıtım’,
            ‘desc’ => ‘Buraya kısa tanıtım hakkında açıklama girilip detaylı açıklama bölümü yapabilirsiniz.’,
            ‘id’ => $prefix . ‘kisa_tanitim’,
            ‘type’ => ‘text’
        )
Yukarıdaki array kısmını çoğaltabilirsiniz sadece [parantez kapanış] sonuna [virgül koyup] aynı kodu yazabilir ve isimleri değiştirip kullanabilirsiniz.
Evet artık bu aşamada geçtikten sonra dizide ki [array daki] type kısmına textarea ,text ve diğer form elemanlarının type değerlerini belirtebilirsiniz.
Geçelim en önemli konuya bu yazıdan aldığımız değerleri tasarımımızda nasıl göstereceğiz.
<?php  echo get_post_meta($post->ID, ‘getir_kisa_tanitim’, true) ?>

Yukarıdaki kodumuz sayesinde getir_ kısmından sonraki değerleri array daki ‘id’ => $prefix. alanından çağırır ve sayfanızda gösterir.

Bu yazının da daha sonuna geldik en kısa sürede videolu bir anlatım yaparak yine sizinle paylaşacağım.

Görüşmek üzere Hoşçakalın ☺ ☺ …