it-swarm.com.de

Laden Sie das Bild vom Frontend hoch und ändern Sie die Größe

Ich arbeite daran, die Möglichkeit hinzuzufügen, einige custom_post_type aus dem Frontend hinzuzufügen. Ich kann Bilder mit ihnen verknüpfen, aber anscheinend wird die Größe nicht geändert. Und ich brauche wirklich die speziellen Größen, die ich in meiner functions.php definiert habe.

Folgendes mache ich:

if(!empty($_FILES['IMAGE'])){
        include_once ABSPATH . 'wp-admin/includes/media.php';
        include_once ABSPATH . 'wp-admin/includes/file.php';
        include_once ABSPATH . 'wp-admin/includes/image.php';
        $file = $_FILES['IMAGE'];

        $upload = wp_handle_upload( $file, array('test_form' => false));
          if(!isset($upload['error']) && isset($upload['file'])){
            $title = $file['name'];

            $filetype = wp_check_filetype( basename($upload['file'], null ));

            $ext = strrchr($title,'.');
            $title =($ext !== false) ? substr($title, 0, -strlen($ext)) : $title;

              //$url_img = wp_get_attachment_url( $attach_key );
              $attach_key = '_thumbnail_id';
              $attach_id = wp_insert_attachment($attachment,$upload['file']);
              $existing_download = (int) get_post_meta($new_eta_ID, $attach_key, true);
              if(is_numeric($existing_download)){
                wp_delete_attachment( $existing_download );
              }
              update_post_meta($new_eta_ID, $attach_key, $attach_id,true);
          }
      }

Die ausgewählten Dateien werden hochgeladen, die Größe wird jedoch nicht geändert. Wie kann ich das machen ?

Vielen Dank !

2
zEd.

Der folgende Code stammt aus meinem "Dynamic Image Resize" -Plugin .

Das Plugin berücksichtigt eine ID sowie einen String. Ich habe diese Zeilen nicht gelöscht, da sie für spätere Besucher nützlich sein könnten - überprüfen Sie den Link trotzdem.

Rufen Sie das Bild über ID oder URL ab

    $hw_string    = image_hwstring( $width, $height );

    $needs_resize = true;

    $error        = false;
    // ID as src
    if ( ! is_string( $src ) )
    {
        $att_id = $src;
        // returns false on failure
        $src    = wp_get_attachment_url( $src );

        // If nothing was found:
        ! $src AND $error = true;
    }
    // Path as src
    else
    {
        $upload_dir = wp_upload_dir();
        $base_url   = $upload_dir['baseurl'];

        // Let's see if the image belongs to our uploads directory...
        $img_url = substr(
             $src
            ,0
            ,strlen( $base_url )
        );
        // ...And if not: just return the image HTML string
        if ( $img_url !== $base_url )
        {
            return $this->get_markup(
                 $img_url
                ,$hw_string
                ,$classes
            );
        }

        // Look up the file in the database.
        $file   = str_replace(
             trailingslashit( $base_url )
            ,''
            ,$src
        );
        $att_id = $this->get_attachment( $file );

        // If no attachment record was found:
        ! $att_id AND $error = true;
    }

Auf Fehler prüfen

und abbrechen, wenn kein Anhang gefunden wurde. Dies würde bedeuten, dass der Upload nicht wie erwartet beendet wurde.

    // Abort if the attachment wasn't found
    if ( $error )
    {
        # @TODO Error handling with proper message
        # @TODO Needs a test case
        # remove $file in favor of $error_msg
        /*
        $data = get_plugin_data( __FILE__ );
        $error_msg = "Plugin: {$data['Name']}: Version {$data['Version']}";
        */

        # @TODO In case, we got an ID, but found no image: if ( ! $src ) $file = $att_id;

        return new WP_Error(
             'no_attachment'
            ,__( 'Attachment not found.', 'dyn_textdomain' )
            ,$file
        );
    }

Überprüfen Sie bereits vorhandene Bildgrößen

Für den Fall, dass es bereits ein Bild in der von uns benötigten Größe gab. Dies kann der Fall sein, wenn der Benutzer mehrmals versucht, dasselbe Bild hochzuladen (was Sie überprüfen müssen, um Duplikate zu vermeiden).

    // Look through the attachment meta data for an image that fits our size.
    $meta = wp_get_attachment_metadata( $att_id );
    foreach( $meta['sizes'] as $key => $size )
    {
        if (
            $width === $size['width']
            AND $height === $size['height']
            )
        {
            $src = str_replace(
                 basename( $src )
                ,$size['file']
                ,$src
            );
            $needs_resize = false;
            break;
        }
    }

Verarbeiten Sie die Größenänderung

Jetzt sind wir sicher, dass wir einen Anhang haben und die Größe ändern müssen. Wir aktualisieren auch die Metadaten für post und attachment nach dem Typ.

    // If an image of such size was not found, ...
    if ( $needs_resize )
    {
        $attached_file = get_attached_file( $att_id );
        // ...we can create one.
        $resized       = image_make_intermediate_size(
             $attached_file
            ,$width
            ,$height
            ,true
        );

        if ( ! is_wp_error( $resized ) )
        {
            // Let metadata know about our new size.
            $key = sprintf(
                 'resized-%dx%d'
                ,$width
                ,$height
            );
            $meta['sizes'][ $key ] = $resized;
            $src = str_replace(
                 basename( $src )
                ,$resized['file']
                ,$src
            );

            wp_update_attachment_metadata( $att_id, $meta );

            // Record in backup sizes, so everything's
            // cleaned up when attachment is deleted.
            $backup_sizes = get_post_meta(
                 $att_id
                ,'_wp_attachment_backup_sizes'
                ,true
            );

            ! is_array( $backup_sizes ) AND $backup_sizes = array();

            $backup_sizes[ $key ] = $resized;

            update_post_meta(
                 $att_id
                ,'_wp_attachment_backup_sizes'
                ,$backup_sizes
            );
        }

Jetzt sollte alles in Ordnung und bereit sein, weiterzumachen.

Wenn Sie nicht alles benötigen, löschen Sie einfach das, was Sie nicht benötigen, aber achten Sie darauf, dass Sie die erforderlichen Fehlerprüfungen nicht auslassen. Sicher ist sicher.

1
kaiser