Adaugă metabox cu media uploader într-un tip de postare personalizat

1 apr. 2014, 10:18:47
Vizualizări: 26.5K
Voturi: 4

Am nevoie să creez un "metabox pentru încărcarea media" și să-l adaug la tipul meu de postare personalizat. Am creat deja metabox-uri normale, funcția pentru a le adăuga la tipul de postare personalizat și funcția pentru a le salva, am nevoie doar să folosesc media uploader-ul WordPress dar nu-mi dau seama cum să fac asta. După aceea, aș dori să inserez ceva de genul "Adaugă mai multe imagini" care să adauge mai multe metabox-uri în pagină.

Ceva de genul acesta: Exemplu de media uploader într-un metabox WordPress

8
Comentarii

Ai încercat ceva? Momentan pare că vrei ca noi să-ți facem treaba. Resurse: Tutorial despre utilizarea încărcătorului media | Codex: Crearea unei Metabox | Câmpuri repetitive | Soluție premium gata făcută

helgatheviking helgatheviking
1 apr. 2014 10:39:13

Nu, am nevoie doar de ceva de la care să pornesc pentru că am găsit doar tutoriale dificile, dar voi verifica primul pe care mi l-ai dat :)

dborghez dborghez
1 apr. 2014 11:38:24

Ei bine, ceea ce ceri este destul de complex (câmpuri repetitive pentru încărcare), așa că e normal să te aștepți ca tutorialele să fie provocatoare. Poți să-ți economisești mult timp și nervi cu mai puțin de 25$ folosind extensia Advanced Custom Fields.

helgatheviking helgatheviking
1 apr. 2014 12:19:08

Da, dar dezvolt o temă și nu pot include un plugin care costă :/

dborghez dborghez
1 apr. 2014 12:54:17

Site-ul lor spune următoarele despre licență: "Puteți include acest add-on într-o temă WP premium (nu gratuită) sau Plugin". Nu spun că nu vei primi un răspuns aici în cele din urmă (deși va trebui să depui mai mult efort), dar merită să te gândești și cât valorează timpul tău. Cât de repede poți construi ceva atât de complex? Dacă m-ai angaja pe mine, cu siguranță te-aș costa mult mai mult decât 25$ pentru a construi asta. Doar câteva gânduri.

helgatheviking helgatheviking
1 apr. 2014 13:09:10

Mulțumesc pentru răspuns. Am verificat documentația și am citit că pot ascunde ACF, astfel încât nimeni să nu vadă în panoul de administrare că îl folosesc. Probabil o să-l iau :) "Problema mea mare" este că nu aș adăuga niciun plugin, aș încerca să fac totul singur citind tutoriale și întrebând, dar sunt încă prea începător să reușesc asta.

dborghez dborghez
1 apr. 2014 13:26:47

Uneori un plugin este exact ceea ce ai nevoie. Sunt pentru învățare, dar nu este nevoie să reinventezi roata mereu. :) Mult succes.

helgatheviking helgatheviking
1 apr. 2014 13:29:30

Există un script excelent pentru asta aici Îl poți activa ca un plugin simplu de descărcat pentru a vedea cum funcționează, apoi poți selecta liniile relevante de js și să le folosești în codul tău.

Fanky Fanky
25 oct. 2019 13:03:56
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare 1
1

Lucrez la ceva similar. Acesta este pentru o meta-box de încărcare podcast. Returnează URL-ul către fișier. Iată ce am până acum:

//Adăugare Metabox
add_action('add_meta_boxes', 'add_upload_file_metaboxes');

function add_upload_file_metaboxes() {
    add_meta_box('swp_file_upload', 'Încărcare Fișier', 'swp_file_upload', 'podcasts', 'normal', 'default');
}


function swp_file_upload() {
    global $post;
    // Noncename necesar pentru a verifica originea datelor
    echo '<input type="hidden" name="podcastmeta_noncename" id="podcastmeta_noncename" value="'.
    wp_create_nonce(plugin_basename(__FILE__)).
    '" />';
    global $wpdb;
    $strFile = get_post_meta($post -> ID, $key = 'podcast_file', true);
    $media_file = get_post_meta($post -> ID, $key = '_wp_attached_file', true);
    if (!empty($media_file)) {
        $strFile = $media_file;
    } ?>


    <script type = "text/javascript">

        // Încărcarea fișierelor
        var file_frame;
    jQuery('#upload_image_button').live('click', function(podcast) {

        podcast.preventDefault();

        // Dacă frame-ul media există deja, redeschide-l
        if (file_frame) {
            file_frame.open();
            return;
        }

        // Creează frame-ul media
        file_frame = wp.media.frames.file_frame = wp.media({
            title: jQuery(this).data('uploader_title'),
            button: {
                text: jQuery(this).data('uploader_button_text'),
            },
            multiple: false // Setează true pentru a permite selectarea mai multor fișiere
        });

        // Când un fișier este selectat, rulează un callback
        file_frame.on('select', function(){
            // Am setat multiple la false, deci obținem doar o imagine din uploader
            attachment = file_frame.state().get('selection').first().toJSON();

            // aici sunt câteva dintre variabilele pe care le poți folosi pentru atașament;
            //var all = JSON.stringify( attachment );      
            //var id = attachment.id;
            //var title = attachment.title;
            //var filename = attachment.filename;
            var url = attachment.url;
            //var link = attachment.link;
            //var alt = attachment.alt;
            //var author = attachment.author;
            //var description = attachment.description;
            //var caption = attachment.caption;
            //var name = attachment.name;
            //var status = attachment.status;
            //var uploadedTo = attachment.uploadedTo;
            //var date = attachment.date;
            //var modified = attachment.modified;
            //var type = attachment.type;
            //var subtype = attachment.subtype;
            //var icon = attachment.icon;
            //var dateFormatted = attachment.dateFormatted;
            //var editLink = attachment.editLink;
            //var fileLength = attachment.fileLength;

            var field = document.getElementById("podcast_file");

            field.value = url; //setează variabila pe care vrei să o aibă câmpul
        });

        // În final, deschide modalul
        file_frame.open();
    });

    </script>



    <div>

        <table>
        <tr valign = "top">
        <td>
        <input type = "text"
    name = "podcast_file"
    id = "podcast_file"
    size = "70"
    value = "<?php echo $strFile; ?>" />
        <input id = "upload_image_button"
    type = "button"
    value = "Încarcă">
        </td> </tr> </table> <input type = "hidden"
    name = "img_txt_id"
    id = "img_txt_id"
    value = "" />
        </div>     <?php
    function admin_scripts() {
        wp_enqueue_script('media-upload');
        wp_enqueue_script('thickbox');
    }

    function admin_styles() {
        wp_enqueue_style('thickbox');
    }
    add_action('admin_print_scripts', 'admin_scripts');
    add_action('admin_print_styles', 'admin_styles');
}


//Salvarea fișierului
function save_podcasts_meta($post_id, $post) {
    // verifică dacă acest lucru a venit de pe ecranul nostru și cu autorizația corespunzătoare,
    // deoarece save_post poate fi declanșat și în alte momente
    if (!wp_verify_nonce($_POST['podcastmeta_noncename'], plugin_basename(__FILE__))) {
        return $post -> ID;
    }
    // Utilizatorul are permisiunea de a edita postarea?
    if (!current_user_can('edit_post', $post -> ID))
        return $post -> ID;
    // Trebuie să găsim și să salvăm datele
    // Le vom pune într-un array pentru a le face mai ușor de parcurs
    $podcasts_meta['podcast_file'] = $_POST['podcast_file'];
    // Adaugă valorile din $podcasts_meta ca câmpuri personalizate

    foreach($podcasts_meta as $key => $value) {
        if ($post -> post_type == 'revision') return;
        $value = implode(',', (array) $value);
        if (get_post_meta($post -> ID, $key, FALSE)) { // Dacă câmpul personalizat are deja o valoare, o va actualiza
            update_post_meta($post -> ID, $key, $value);
        } else { // Dacă câmpul personalizat nu are o valoare, o va adăuga
            add_post_meta($post -> ID, $key, $value);
        }
        if (!$value) delete_post_meta($post -> ID, $key); // Șterge dacă valoarea este goală
    }
}
add_action('save_post', 'save_podcasts_meta', 1, 2); // salvează câmpurile personalizate
2 apr. 2014 04:50:36
Comentarii

Te rog: Reformatează acel cod.

kaiser kaiser
2 apr. 2014 05:49:04