Cum să adaugi buton de încărcare imagine în metabox în WordPress

7 aug. 2013, 13:24:47
Vizualizări: 17.7K
Voturi: 4

Doresc să adaug un buton pentru încărcarea imaginilor și preluarea URL-ului. Poate cineva să mă ajute, încerc de câteva zile. Folosesc codul din acest thread Creare mai multe Metabox-uri după nevoie.

add_action( 'add_meta_boxes', 'dynamic_add_custom_box' );

/* Facem ceva cu datele introduse */
add_action( 'save_post', 'dynamic_save_postdata' );

/* Adaugă un box în coloana principală la editarea Postărilor și Paginilor */
function dynamic_add_custom_box() {
    add_meta_box(
        'dynamic_sectionid',
        __( 'Informații Client', 'myplugin_textdomain' ),
        'dynamic_inner_custom_box',
        'page');
}

/* Afișează conținutul box-ului */
function dynamic_inner_custom_box() {
    global $post;
    // Folosim nonce pentru verificare
    wp_nonce_field( plugin_basename( __FILE__ ), 'dynamicMeta_noncename' );
    ?>
    <div id="meta_inner">
    <?php

    //preluăm meta salvate ca array
    $ourwork = get_post_meta($post->ID,'ourwork',true);

    $c = 0;
    if ( is_array( $ourwork ) ) {
        foreach( $ourwork as  $track ) {
            if ( isset( $track['thumb'] ) || isset( $track['client-img1'] ) || isset( $track['client-img2'] ) || isset( $track['client-img3'] ) || isset( $track['client-img4'] ) || isset( $track['client-desc'] ) ) {
                printf( '<p><strong>Imagine Thumbnail</strong> &nbsp;:&nbsp;<input type="button" name="ourwork[%1$s][thumb]" value="%2$s" size="50" /><br/><br/><strong>Imagine Client 1</strong> : <input type="button" name="ourwork[%1$s][client-img1]" value="%3$s" size="50" /><br/><br/>
                <strong>Imagine Client 2</strong> : <input type="button" name="ourwork[%1$s][client-img2]" value="%4$s" size="50"/><br/><br/>
                <strong>Imagine Client 3</strong> : <input type="button" name="ourwork[%1$s][client-img3]" value="%5$s" size="50" /><br/><br/>
                <strong>Imagine Client 4</strong> : <input type="button" name="ourwork[%1$s][client-img4]" value="%6$s" size="50" />
                <br/><br/>
                <strong>Link Client &nbsp;&nbsp;&nbsp;&nbsp;1</strong> : <input type="text" name="ourwork[%1$s][client-link1]" value="%7$s" size="50" />
                <br/><br/>
                <strong>Descriere Client</strong> :<br/><textarea id="elm1" class="tinymce_data" name="ourwork[%1$s][client-desc]" cols="75" rows="6" >%8$s</textarea><br/>
                <span class="remove">%9$s</span></p>', $c, $track['thumb'], $track['client-img1'], $track['client-img2'] , $track['client-img3'], $track['client-img4'], $track['client-link1'], $track['client-desc'],  __( '<span class="button">Șterge Secțiunea</span>' ) );
                $c = $c +1;
            }
        }
    }
    ?>
<span id="here"></span>
<span class="add"><?php _e('<span class="button">Adaugă Secțiune</span>'); ?></span>
<script>
    var $ =jQuery.noConflict();
    $(document).ready(function() {
        var count = <?php echo $c; ?>;
        $(".add").click(function() {
            count = count + 1;

            $('#here').append('<p><strong>Imagine Thumbnail</strong> &nbsp;:&nbsp;<input type="button" name="ourwork['+count+'][thumb]" value="" size="50"/><br/><br/><strong>Imagine Client 1</strong> : <input type="type="button"" name="ourwork['+count+'][client-img1]" value="" size="50"/><br/><br/><strong>Imagine Client 2</strong> : <input type="button" name="ourwork['+count+'][client-img2]" value="" size="50"/><br/><br/><strong>Imagine Client 3</strong> : <input type="type="button"" name="ourwork['+count+'][client-img3]" value="" size="50"/><br/><br/><strong>Imagine Client 4</strong> : <input type="type="button"" name="ourwork['+count+'][client-img4]" value="" size="50"/><br/><br/><strong>Link Client &nbsp;&nbsp;&nbsp;&nbsp;1</strong> : <input type="text" name="ourwork['+count+'][client-link1]" value="" size="50"/><br/><br/><strong>Descriere Client</strong> :<br/><textarea id="elm1" name="ourwork['+count+'][client-desc]" cols="75" rows="6"></textarea><br/><span class="remove"><span class="button">Șterge Secțiunea</span></span></p>' );
            return false;       
        });
        $(".remove").live('click', function() {
            $(this).parent().remove();
        });
    });
    </script>
</div><?php

}

/* Când postarea este salvată, salvăm datele noastre personalizate */
function dynamic_save_postdata( $post_id ) {
    // verificăm dacă aceasta este o salvare automată
    // Dacă da, formularul nostru nu a fost trimis, așa că nu vrem să facem nimic
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
        return $post_id;

    // verificăm dacă aceasta provine din ecranul nostru și cu autorizare corespunzătoare,
    // deoarece save_post poate fi declanșat în alte momente
    if ( !isset( $_POST['dynamicMeta_noncename'] ) )
        return;

    if ( !wp_verify_nonce( $_POST['dynamicMeta_noncename'], plugin_basename( __FILE__ ) ) )
        return;

    // OK, suntem autentificați: trebuie să găsim și să salvăm datele

    $ourwork = $_POST['ourwork'];

    update_post_meta($post_id,'ourwork',$ourwork);
}
2
Comentarii

Am făcut un articol pe blog despre asta, te rog verifică: http://www.derby-web-design-agency.co.uk/blog-post/how-to-create-multiple-wordpress-3-5-media-uploaders-in-theme-options/27/ Cred că la asta te referi :)

Robert Robert
7 aug. 2013 21:46:05
Toate răspunsurile la întrebare 2
0

Acesta este modul în care creez un buton de încărcare în metabox:

FIȘIER: template_dir/functions.php

adaugă aceste linii:

wp_enqueue_script('custom-js', get_template_directory_uri().'/js/custom-js.js');

// Adaugă Meta Box-ul  
function add_custom_meta_box() {  
    add_meta_box(  
        'custom_meta_box', // $id  
        'Meta Box Personalizat', // $title   
        'show_custom_meta_box', // $callback  
        'post', // $page  
        'normal', // $context  
        'high'); // $priority  
}  
add_action('add_meta_boxes', 'add_custom_meta_box');  

// Array de Câmpuri  
$prefix = 'custom_';  
$custom_meta_fields = array(
    array(  
        'name'  => 'Imagine',  
        'desc'  => 'O descriere pentru câmp.',  
        'id'    => $prefix.'image',  
        'type'  => 'image'  
    )  
);


// Callback-ul  
function show_custom_meta_box() {  
global $custom_meta_fields, $post;  
// Folosește nonce pentru verificare  
echo '';  

    // Începe tabelul de câmpuri și bucla  
    echo '';  
    foreach ($custom_meta_fields as $field) {  
        // obține valoarea acestui câmp dacă există pentru acest post  
        $meta = get_post_meta($post->ID, $field['id'], true);  
        // începe un rând de tabel cu  
        echo ' 
                '.$field['label'].' 
                ';  
                switch($field['type']) {  
                    // cazurile vor fi aici 
                        // imagine  
                        case 'image':  
                            $image = get_template_directory_uri().'/images/image.png';    
                            echo ''.$image.'';  
                            if ($meta) { $image = wp_get_attachment_image_src($meta, 'medium'); $image = $image[0]; }                 
                            echo    ' 
                                        
Șterge Imaginea '.$field['desc'].''; break; } //end switch echo ''; } // end foreach echo ''; // end table } // Salvează Datele function save_custom_meta($post_id) { global $custom_meta_fields; // verifică nonce if (!wp_verify_nonce($_POST['custom_meta_box_nonce'], basename(__FILE__))) return $post_id; // verifică autosave if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; // verifică permisiunile 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; } // parcurge câmpurile și salvează datele foreach ($custom_meta_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); } } // end foreach } add_action('save_post', 'save_custom_meta');

FIȘIER: template_dir/js/custom-js.js

    jQuery(function(jQuery) {  

        jQuery('.custom_upload_image_button').click(function() {  
            formfield = jQuery(this).siblings('.custom_upload_image');  
            preview = jQuery(this).siblings('.custom_preview_image');  
            tb_show('', 'media-upload.php?type=image&TB_iframe=true');  
            window.send_to_editor = function(html) {  
                imgurl = jQuery('img',html).attr('src');  
                classes = jQuery('img', html).attr('class');  
                id = classes.replace(/(.*?)wp-image-/, '');  
                formfield.val(imgurl);  //obține URL-ul imaginii și îl copiază în câmp
                preview.attr('src', imgurl);  
                tb_remove();  
            }  
            return false;  
        });  

        jQuery('.custom_clear_image_button').click(function() {  
            var defaultImage = jQuery(this).parent().siblings('.custom_default_image').text();  
            jQuery(this).parent().siblings('.custom_upload_image').val('');  
            jQuery(this).parent().siblings('.custom_preview_image').attr('src', defaultImage);  
            return false;  
        });  

    });  



Dacă dorești să adaugi mai multe tipuri de câmpuri, poți afla mai multe la: Meta Box-uri Personalizate Reutilizabile Partea 1: Introducere și Câmpuri de Bază

4 feb. 2014 12:32:51
0

Există un cadru excelent pentru interacțiunea cu Metabox-uri care este destul de ușor de utilizat (bine documentat) și include suport pentru multiple opțiuni de metabox-uri, inclusiv încărcarea de imagini/fișiere. Se află pe Github: Custom Metaboxes and Fields (CMB). Dacă ați folosi CMB, aceasta ar fi o abordare pentru implementarea unui câmp de încărcare.

Va trebui să înregistrați metabox-ul pentru încărcarea fișierelor și să adăugați un apel către init.php din CMB folosind următorul cod în fișierul functions.php:

function be_sample_metaboxes( $meta_boxes ) {  
    $prefix = '_cmb_'; // Prefix pentru toate câmpurile  
    $meta_boxes['test_metabox'] = array(  
        'id' => 'test_metabox',  
        'title' => 'Test Metabox',  
        'pages' => array('post'), // tipul de post (de ex. post, pagină etc.)  
        'context' => 'normal',  
        'priority' => 'high',  
        'show_names' => true, // Afișează numele câmpurilor în stânga  
        'fields' => array(  
            array(  
                'name' => __( 'Imagine Test', 'cmb' ),  
                'desc' => __( 'Încărcați o imagine sau introduceți un URL.', 'cmb' ),  
                'id'   => $prefix . 'test_image',  
                'type' => 'file',  
            ),  
        ),  
    );  

    return $meta_boxes;  
}  
add_filter( 'cmb_meta_boxes', 'be_sample_metaboxes' );  

// Inițializează clasa metabox  
add_action( 'init', 'be_initialize_cmb_meta_boxes', 9999 );  
function be_initialize_cmb_meta_boxes() {  
    if ( !class_exists( 'cmb_Meta_Box' ) ) {  
        require_once( './metabox/init.php' );  
    }  
}  

Linia require_once( './metabox/init.php' ); din a doua funcție presupune că ați plasat fișierele din CMB Metabox într-un director din tema dumneavoastră numit metabox. Apoi, pentru a apela această opțiune în șablonul dumneavoastră (de ex. single.php), puteți folosi următoarea funcție:

$file = get_post_meta( $post->ID, '_cmb_test_image', true );  
17 mar. 2014 01:33:13