Folosirea media_handle_upload pentru încărcarea imaginilor în WordPress

20 dec. 2010, 17:25:50
Vizualizări: 13.5K
Voturi: 3

Încerc să încarc o imagine în WordPress folosind o funcție...

Am găsit metoda de a încărca imagini, dar există o problemă...

Când utilizatorul încarcă imaginea, WordPress creează mai multe imagini cu dimensiuni diferite, iar asta este o problemă pentru că vreau doar o singură imagine.

Uită-te la folderul wp-content/uploads/2010/10 (aceasta este o singură imagine, dar WordPress creează aceeași imagine în dimensiuni diferite).

https://i.sstatic.net/fn6ab.jpg

Acesta este codul meu:

<?php /*
Șablon: Pagină de Încărcare
*/?>

<?php get_header();
?><div class="container_12">
    <div id="content">
    <form id="file-form" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="POST">
    <p id="async-upload-wrap">
    <label for="async-upload">Încărcare</label>
    <input type="file" id="async-upload" name="async-upload"> <input type="submit" value="Încarcă" name="html-upload">
    </p>

    <p>
    <input type="hidden" name="post_id" id="post_id" value="<?php echo '212';?>" />
    <?php wp_nonce_field('client-file-upload'); ?>
    <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
    </p>

    <p>
    <input type="submit" value="Salvează toate modificările" name="save" style="display: none;">
    </p>
    </form>

<?php
if ( isset( $_POST['html-upload'] ) && !empty( $_FILES ) ) {
    require_once(ABSPATH . 'wp-admin/includes/admin.php');
    $id = media_handle_upload('async-upload', 1199); //ID-ul postării paginii Fișiere Client
    unset($_FILES);
    if ( is_wp_error($id) ) {
        $errors['upload_error'] = $id;
        $id = false;
    }

    if ($errors) {
        echo "<p>A apărut o eroare la încărcarea fișierului tău.</p>";
    } else {
        echo "<p>Fișierul tău a fost încărcat.</p>";
    }
}

get_sidebar();
get_footer();?>

Cum pot face să fie doar o singură imagine?

Sper că mă înțelegi ^* pentru că limba mea ><

3
Comentarii

Care este problema cu thumbnail-urile? Tehnic, este ceea ce ai cerut, dar s-ar putea să aibă prea multe efecte secundare, așa că am crezut că e mai bine să întreb mai întâi :)

hakre hakre
20 dec. 2010 18:47:37

Problema este că atunci când încarc o imagine (o singură imagine), WordPress va crea mai mult de 4 imagini cu dimensiuni diferite... Nu am nevoie de ele.. CUM pot dezactiva această funcție? mulțumesc ^_^

AboSami AboSami
21 dec. 2010 21:17:25

AboSami, dacă se întâmplă să revii aici ( văzut pe 25 dec '11 :), te rog să selectezi unul dintre răspunsurile minunate pe care oamenii le-au dat la întrebarea ta (o decizie grea!)...

brasofilo brasofilo
7 iul. 2012 10:57:19
Toate răspunsurile la întrebare 4
0

Folosește wp_handle_upload() pentru a gestiona încărcările manual, fără a crea atașamente sau redimensionări.

Funcția media_handle_upload() creează de fapt un post de tip atașament, iar procesul de redimensionare are loc când este apelată funcția wp_generate_attachment_metadata. Dacă nu apelezi această funcție, atunci nu vor avea loc redimensionări.

30 mar. 2011 00:16:48
0

Marcaj HTML:

<p>
  <label for="custom-upload">Încarcă Imagine Nouă:</label>

  <input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
</p>
<?php
  /*Preluarea imaginii*/
  $attachment = get_post_meta($postid, 'custom_image');

  if($attachment[0]!='')
  {
   echo wp_get_attachment_link($attachment[0], 'thumbnail', false, false);
  }
?>

Încărcarea imaginii:

<?php
global $post; /*Obiectul global post*/

$post_id = $post->ID; /*Obținerea ID-ului postului curent*/
$upload = $_FILES['upload']; /*Recepționarea imaginii încărcate din formular*/
add_custom_image($post_id, $upload); /*Apelarea funcției de încărcare a imaginii*/

function add_custom_image($post_id, $upload)
{
 $uploads = wp_upload_dir(); /*Obține calea directorului de încărcare din WordPress*/

 if (is_writable($uploads['path']))  /*Verifică dacă directorul de încărcare are permisiuni de scriere*/
 {
  if ((!empty($upload['tmp_name'])))  /*Verifică dacă imaginea încărcată nu este goală*/
  {
   if ($upload['tmp_name'])   /*Verifică dacă imaginea a fost încărcată în directorul temporar*/
   {
    $file=handle_image_upload($upload); /*Apelăm funcția noastră personalizată pentru a ÎNCĂRCA EFECTIV imaginea*/

    $attachment = array  /*Creăm un atașament pentru postul nostru*/
    (
      'post_mime_type' => $file['type'],  /*Tipul atașamentului*/
      'post_parent' => $post_id,  /*ID-ul postului*/
    );

    $aid = wp_insert_attachment($attachment, $file['file'], $post_id);  /*Inserează atașamentul postului și returnează ID-ul atașamentului*/
    $a = wp_generate_attachment_metadata($aid, $file['file'] );  /*Generează metadate pentru noul atașament*/
    $prev_img = get_post_meta($post_id, 'custom_image');  /*Obține imaginea încărcată anterior*/
    if(is_array($prev_img))
    {
     if($prev_img[0] != '')  /*Dacă imaginea există*/
     {
      wp_delete_attachment($prev_img[0]);  /*Șterge imaginea anterioară*/
     }
    }
    update_post_meta($post_id, 'custom_image', $aid);  /*Salvează ID-ul atașamentului în metadate*/

    if ( !is_wp_error($aid) ) 
    {
     wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) );  /*Dacă nu există erori, actualizează metadatele imaginii nou încărcate*/
    }
   }
  }
  else
  {
   echo 'Te rog încarcă imaginea.';
  }
 }
}

function handle_image_upload($upload)
{
 global $post;

        if (file_is_displayable_image( $upload['tmp_name'] )) /*Verifică dacă este imagine*/
        {
    /*gestionează fișierul încărcat*/
            $overrides = array('test_form' => false);
            $file=wp_handle_upload($upload, $overrides);
        }
 return $file;
}
?>
29 mar. 2011 15:13:20
4

Dacă utilizați WordPress 3.x, accesați Admin > Setări > Media.

În secțiunea "Dimensiuni imagine", setați toate valorile la zero (0) și debifați caseta "Decupare miniatură la dimensiunile exacte".

Faceți clic pe "Salvare modificări" și WordPress nu va mai crea miniaturi.

20 dec. 2010 20:22:01
Comentarii

+1, tocmai voiam să postez exact același lucru.. (am petrecut ultimele 5-10 minute testând încărcările și dimensiunile intermediare)..

t31os t31os
20 dec. 2010 21:04:01

problema încă există .. acestea sunt dimensiunile implicite: $default_sizes = array('large', 'medium', 'thumbnail' ); Eu vreau ca dimensiunile implicite să fie 'thumbanil', 'photo_author', 'big_image' .. etc (photo_author = 20 * 20 ) , (big_image = 600 * 600 ) de exemplu ..

AboSami AboSami
21 dec. 2010 22:06:07

@AboSami Nu asta ai cerut în întrebarea ta inițială. Ai spus "wordpress creează mai multe imagini cu dimensiuni diferite, aceasta este o problemă pentru că eu vreau o singură imagine". Dacă acum ai nevoie să știi cum să ADĂUGAți dimensiuni personalizate sau să redenumești dimensiunile existente, aceasta este o întrebare diferită și ar trebui postată separat. Dar în timp ce suntem la subiect - de ce îți pasă cum se numesc intern? Doar schimbă 'medium' la 20*20 și 'large' la 600*600. Oricare dintre dimensiunile standard pot fi setate la orice lățime și înălțime dorești folosind panoul de administrare.

MathSmath MathSmath
21 dec. 2010 23:14:14

Îmi pare rău că întrebarea mea nu este clară... Am nevoie să reduc dimensiunile implicite, există trei tipuri (large, medium, thumbnail) și vreau să elimin 'large' și 'medium'. De asemenea, vreau să adaug doar 'big-picture'. CUM? Mulțumesc domnule MATHSMATH

AboSami AboSami
22 dec. 2010 07:28:28
0

Pentru a preveni WordPress să creeze mai multe imagini pentru miniaturi în timpul încărcării, folosesc acest cod:

add_filter('intermediate_image_sizes_advanced', 'no_image_resizing');
    function no_image_resizing($size) {
        $ret = array();
        return $ret;
    }
24 mai 2011 06:18:15