• 06-01-2016, 02:57:16
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Arkadaşlar bir oyun uygulama indirme sitesi açtım, özel alan olarak dosya ismi, boyutu, türü, indirme seçenekleri gibi ayarları yaptım. Ancak her yazıda tekrar tekrar özel alandan seçmektense Metabox denen teknikle bunların hepsini tek çatı altında toplamak istiyorum.
    Kısaca hazırladığım özel alanı nasıl metabox olarak yazı alanına eklerim? Biraz kaynak buldum ancak düzenleyemiyorum yeterince bilgim yok bu konuda.
    Şimdiden herkese teşekkürler
  • 06-01-2016, 15:29:42
    #2
    <?php
    $prefix = ''; // prefix ön alan adını buraya yazabilirsin ya da boş bırakabilirsin.
    
    $meta_box = array( 
        'id' => 'my-meta-box', 
        'title' => 'Film Bilgileri', 
        'page' => 'post', 
        'context' => 'normal', 
        'priority' => 'high', 
        'fields' => array( 
    	  array( 
                'name' => 'Dosya ismin', 
                'id' => $prefix . 'dosya_ismi', 
                'type' => 'text', 
            ), 
            array( 
                'name' => 'Dosya Boyutu', 
                'desc' => 'Dosyanın Boyutunu yazınız', 
                'id' => $prefix . 'dosya_boyut', 
                'type' => 'text', 
               
            ), 
    		    array( 
                'name' => 'Dosya Türü', 
                'desc' => 'Dosyanın Türünü seçiniz.', 
                'id' => $prefix . 'dosya_turu', 
                'type' => 'select', 
    			'options' => array('Tur1', 'tur2', 'tur3') 
              
            ),
    		
    		array( 
                'name' => 'İndirme Seçenekleri', 
                'desc' => 'İndirme seçeneğini seçiniz.', 
                'id' => $prefix . 'dosya_indirme_secenek', 
                'type' => 'select', 
    			'options' => array('seçenek1', 'seçenek2', 'seçenek3') 
              
            ),
    			
    
        ) 
    ); 
    
    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); 
            } 
        } 
    }
    
    ?>
    bunu metabox.php olarak kullandığın tema klasörüne kaydet. Daha sonra functions.php 'yi aç ve alttaki kodu <?php ?> tagları arasına ekle

     include_once("/metabox.php");
    kısaca bu şekilde kullanım olarakta

    aşağıdaki örnekleri inceleyebilirsin.

    <?php $dosya_turu = get_post_meta( $post->ID, 'dosya_turul', true ); 
    
    if ($dosya_turu == "tur1") 
    { echo $dosya_turu;}
    else if ($dosya_turu == "tur")
    {echo $dosya_turu; }
    
    ya da direk yazdırmak için
    
    <?php echo get_post_meta($post->ID, 'metabox id adı', true); ?>
  • 06-01-2016, 15:44:16
    #3
    TheLastKinQ adlı üyeden alıntı: mesajı görüntüle
    <?php
    $prefix = ''; // prefix ön alan adını buraya yazabilirsin ya da boş bırakabilirsin.
    
    $meta_box = array( 
        'id' => 'my-meta-box', 
        'title' => 'Film Bilgileri', 
        'page' => 'post', 
        'context' => 'normal', 
        'priority' => 'high', 
        'fields' => array( 
    	  array( 
                'name' => 'Dosya ismin', 
                'id' => $prefix . 'dosya_ismi', 
                'type' => 'text', 
            ), 
            array( 
                'name' => 'Dosya Boyutu', 
                'desc' => 'Dosyanın Boyutunu yazınız', 
                'id' => $prefix . 'dosya_boyut', 
                'type' => 'text', 
               
            ), 
    		    array( 
                'name' => 'Dosya Türü', 
                'desc' => 'Dosyanın Türünü seçiniz.', 
                'id' => $prefix . 'dosya_turu', 
                'type' => 'select', 
    			'options' => array('Tur1', 'tur2', 'tur3') 
              
            ),
    		
    		array( 
                'name' => 'İndirme Seçenekleri', 
                'desc' => 'İndirme seçeneğini seçiniz.', 
                'id' => $prefix . 'dosya_indirme_secenek', 
                'type' => 'select', 
    			'options' => array('seçenek1', 'seçenek2', 'seçenek3') 
              
            ),
    			
    
        ) 
    ); 
    
    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); 
            } 
        } 
    }
    
    ?>
    bunu metabox.php olarak kullandığın tema klasörüne kaydet. Daha sonra functions.php 'yi aç ve alttaki kodu <?php ?> tagları arasına ekle

     include_once("/metabox.php");
    kısaca bu şekilde kullanım olarakta

    aşağıdaki örnekleri inceleyebilirsin.

    <?php $dosya_turu = get_post_meta( $post->ID, 'dosya_turul', true ); 
    
    if ($dosya_turu == "tur1") 
    { echo $dosya_turu;}
    else if ($dosya_turu == "tur")
    {echo $dosya_turu; }
    
    ya da direk yazdırmak için
    
    <?php echo get_post_meta($post->ID, 'metabox id adı', true); ?>
    Yazan ellerinize sağlık, geceden beri araştırıyorum bir türlü ikisinin bir arada olduğu düzgün kaynak bulamamıştım. Şimdi adım adım inceleyerek yapacağım
  • 06-01-2016, 15:53:53
    #4
    Kodu kendinize göre geliştirebilirsiniz.takıldığınız birşeyler olursa sormaktan çekinmeyin.Elimden geldiği kadar yardımcı olmaya çalışırım.
  • 06-01-2016, 16:02:02
    #5
    TheLastKinQ adlı üyeden alıntı: mesajı görüntüle
    Kodu kendinize göre geliştirebilirsiniz.takıldığınız birşeyler olursa sormaktan çekinmeyin.Elimden geldiği kadar yardımcı olmaya çalışırım.
    metabox.php adında bir dosya oluşturudm içine kodları ekledim ve tema dizinine attım ardından temanın functions.php dosyasına include_once("/metabox.php"); kodunu ekledim ancak sitenin tepesinde şöyle hata aldım:

    Şimdi bunu araştırıyorum hocam
    Ek olarak:
    Çok teşekkür ederim hocam sayenizde ne kadardır uğraştığım bir türlü yapamadığım bir şeyi çözdüm çok sağ olun