Încărcare imagine în meta box

29 apr. 2011, 14:48:27
Vizualizări: 3.54K
Voturi: 3

Încerc să implementez încărcarea imaginilor prin intermediul unui meta box fără a utiliza managerul media, dar vreau ca imaginea să fie adăugată ca atașament la postare.

Momentul doar încarc și salvez pe server.

<?php

define("THUMB_DIR", WP_CONTENT_DIR . '/plugins/meta-upload/thumbs/'); 
define("THUMB_URL", WP_CONTENT_URL . '/plugins/meta-upload/thumbs/'); 

// această funcție trebuie implementată

function fileupload( $label ) { ?>
<tr>
    <td class="left_label"> <?php
        echo $label; ?>
    </td>
    <td>
        <form name="uploadfile" id="uploadfile_form" method="POST" enctype="multipart/form-data" action="<?php echo $this->filepath.'#uploadfile'; ?>" accept-charset="utf-8" >
            <input type="file" name="uploadfiles[]" id="uploadfiles" size="35" class="uploadfiles" />
            <input class="button-primary" type="submit" name="uploadfile" id="uploadfile_btn" value="Încarcă"  />
        </form>
    </td>
</tr>  
 <?php
}

// această funcție trebuie adăugată

function fileupload_process() { 
$uploadfiles = $_FILES['uploadfiles'];

if (is_array($uploadfiles)) {

    foreach ($uploadfiles['name'] as $key => $value) {

        // verifică doar fișierele încărcate
        if ($uploadfiles['error'][$key] == 0) {

            $filetmp = $uploadfiles['tmp_name'][$key];

            // curăță numele fișierului și extrage extensia
            $filename = $uploadfiles['name'][$key];

            // obține informații despre fișier
            // @fixme: wp verifică extensia fișierului....
            $filetype = wp_check_filetype( basename( $filename ), null );
            $filetitle = preg_replace('/\.[^.]+$/', '', basename( $filename ) );
            $filename = $filetitle . '.' . $filetype['ext'];
            $upload_dir = wp_upload_dir();

            /**
             * Verifică dacă numele fișierului există deja în director și redenumește
             * fișierul dacă este necesar
             */
            $i = 0;
            while ( file_exists( $upload_dir['path'] .'/' . $filename ) ) {
                $filename = $filetitle . '_' . $i . '.' . $filetype['ext'];
                $i++;
            }
            $filedest = $upload_dir['path'] . '/' . $filename;

            /**
             * Verifică permisiunile de scriere
             */
            if ( !is_writeable( $upload_dir['path'] ) ) {
                $this->msg_e('Nu se poate scrie în directorul %s. Directorul are permisiuni de scriere?');
                return;
            }

            /**
             * Salvează fișierul temporar în directorul de încărcare
             */
            if ( !@move_uploaded_file($filetmp, $filedest) ){
                $this->msg_e("Eroare, fișierul $filetmp nu a putut fi mutat în: $filedest ");
                continue;
            }

            $attachment = array(
                'post_mime_type' => $filetype['type'],
                'post_title' => $filetitle,
                'post_content' => '',
                'post_status' => 'inherit'
            );

            $attach_id = wp_insert_attachment( $attachment, $filedest );
            require_once( ABSPATH . "wp-admin" . '/includes/image.php' );
            $attach_data = wp_generate_attachment_metadata( $attach_id, $filedest );
            wp_update_attachment_metadata( $attach_id,  $attach_data );
        }
    }
}
}

add_action('admin_menu', "post_upload_box_init");
add_action('save_post', 'post_save_thumb');

function post_upload_box_init() {
    add_meta_box("post-thumbnail-posting", "Thumbnail Dark Toob", "post_upload_thumbnail", "post", "advanced");

}

function post_upload_thumbnail() {
    global $post;
?>
<script type="text/javascript">
    document.getElementById("post").setAttribute("enctype","multipart/form-data");
    document.getElementById('post').setAttribute('encoding','multipart/form-data');
</script>

<?php
    $thumb = get_post_meta($post->ID, 'custom_thumbnail',true);

    if ( $thumb )
    {
?>
<div style="float: left; margin-right: 10px;">
    <img style="border: 1px solid #ccc; padding: 3px;" src="<?php echo THUMB_URL . $thumb; ?>" alt="Previzualizare thumbnail" title="Previzualizare thumbnail" />
</div>
<?php
    }
    else
    {
?>
<div style="float: left; margin-right: 10px; width: 200px; height: 150px; line-height: 150px; border: solid 1px #ccc; text-align: center;">Previzualizare thumbnail</div>
<?php } ?>

<div style="float: left;">
    <p>
        <label for="thumb-url-upload"><?php _e("Încarcă prin URL sau Selectează Imagine (Mai jos)"); ?>:</label><br />
        <input style="width: 300px; margin-top:5px;" id="thumb-url-upload" name="thumb-url-upload" type="text" />
    </p>    
    <p>
        <p><label for="thumbnail"><?php _e("Încarcă un thumbnail"); ?>:</label><br />
        <input id="thumbnail" type="file" name="thumbnail" />
    </p>
    <p><input id="thumb-delete" type="checkbox" name="thumb-delete"> <label for="thumb-delete"><?php _e("Șterge thumbnail"); ?></label></p>

    <p style="margin:10px 0 0 0;"><input id="publish" class="button-primary" type="submit" value="<?php _e("Actualizează Postarea"); ?>" accesskey="p" tabindex="5" name="save"/></p>
</div>

<div class="clear"></div>
<?php
}

function post_save_thumb( $postID )
{
global $wpdb;

// Obține ID-ul corect al postării dacă este revizie.
if ( $wpdb->get_var("SELECT post_type FROM $wpdb->posts WHERE ID=$postID")=='revision')
    $postID = $wpdb->get_var("SELECT post_parent FROM $wpdb->posts WHERE ID=$postID");

if ( $_POST['thumb-delete'] )
{
    @unlink(THUMB_DIR . get_post_meta($postID, 'custom_thumbnail', true));
    delete_post_meta($postID, 'custom_thumbnail');
}
elseif ( $_POST['thumb-url-upload'] || !empty($_FILES['thumbnail']['tmp_name']) )
{
    if ( !empty($_FILES['thumbnail']['name']) )
        preg_match("/(\.(?:jpg|jpeg|png|gif))$/i", $_FILES['thumbnail']['name'], $matches);
    else
        preg_match("/(\.(?:jpg|jpeg|png|gif))$/i", $_POST['thumb-url-upload'], $matches);

    $thumbFileName = $postID . strtolower($matches[0]);

    // Locația thumbnail-ului pe server.
    $loc = THUMB_DIR . $thumbFileName;

    $thumbUploaded = false;

    if ( $_POST['thumb-url-upload'] )
    {
        // Încearcă să descarci imaginea folosind fopen.
        if( ini_get('allow_url_fopen') )
        {
            copy($_POST['thumb-url-upload'], $loc);
            $thumbUploaded = true;

        }
        else

        // Dacă fopen nu funcționează, încearcă cu cURL.
        if( function_exists('curl_init') )
        {
            $ch = curl_init($_POST['thumb-url-upload']);
            $fp = fopen($loc, "wb");

            $options = array(CURLOPT_FILE => $fp,
                CURLOPT_HEADER => 0,
                CURLOPT_FOLLOWLOCATION => 1,
                CURLOPT_TIMEOUT => 60);
            curl_setopt_array($ch, $options);

            curl_exec($ch);
            curl_close($ch);

            fclose($fp);
            $thumbUploaded = true;
        }
    }
    else

    // Încearcă să muți thumbnail-ul încărcat în directorul de thumbnail-uri.
    if ( !empty($_FILES['thumbnail']['tmp_name']) && move_uploaded_file($_FILES['thumbnail']['tmp_name'], $loc) )
        $thumbUploaded = true;

    if ( $thumbUploaded )
    {
        if ( !update_post_meta($postID, 'custom_thumbnail', $thumbFileName) )
            add_post_meta($postID, 'custom_thumbnail', $thumbFileName);
    }

}
}
1
Comentarii

Vreo soluție? Te rog marchează ceva ca rezolvat sau adaugă propriul răspuns și marchează-l ca soluție.

kaiser kaiser
24 oct. 2011 12:58:28
Toate răspunsurile la întrebare 1
2

Poate doriți să aruncați o privire la plugin-ul lui Steve Taylor și abordarea sa aici

Dominik "ocean90" Schilling - autorul (noii în 3.5) biblioteci media, are un depozit GitHub unde prezintă câteva demo-uri.

Pe scurt, s-ar putea să nu reușiți să implementați un încărcător media cu funcționalitate drag&drop într-o meta box cu tutorialele sale, dar ar trebui să fie posibil... cumva.

29 apr. 2011 14:55:20
Comentarii

Plugin-ul este întrerupt. Căutați o direcție personalizată ca răspuns în loc de un link. :)

Mayeenul Islam Mayeenul Islam
4 iul. 2013 07:31:15

@MayeenulIslam Am adăugat un alt link. Când am încercat să implementez și să extind unele funcționalități ale bibliotecii media acum câteva săptămâni, nu pot posta mai multe pentru că pur și simplu nu le cunosc și mi-ar lua câteva ore să le înțeleg. :)

kaiser kaiser
4 iul. 2013 09:38:00