it-swarm.com.de

(gelöst) Bilder von einer benutzerdefinierten Seite mit blueimp uploader hochladen?

Ich arbeite mit einem Frontend-Upload-Formular, das blueimp jQuery-File-Uploader verwendet, um all das zu heben ... aber nachdem ich versucht habe, blueimp mit der erforderlichen WordPress-Funktionalität auszustatten, bin ich auf einige Fehler gestoßen, die ich nicht herausfinden kann aus.

Update/Mein Code

HTML (das Frontend-Formular):

<form id="fileupload" action="" method="POST" enctype="multipart/form-data">

    <span class="btn btn-success fileinput-button">
        <span>Add files...</span>
        <!-- The file input field used as target for the file upload widget -->
        <input type="file" name="files[]" multiple />
    </span>

    <div id="progress" class="progress">
        <div class="progress-bar progress-bar-success"></div>
    </div>
</form>

JS (Ich verwende dasselbe js, das in der Basic Plus-Demo-Datei verwendet wird.) Ändern Sie einfach die URL-Variable in den Speicherort der UploadHandler.php-Datei

PHP (relative Teile meines Upload-Skripts ... Ich verwende das standardmäßige UploadHandler-Skript und versuche, es für WordPress anzupassen)

// Required WordPress files and hooks
require_once( $_SERVER['DOCUMENT_ROOT'] . "/wp-load.php" );
require_once( $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/includes/media.php" );
require_once( $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/includes/file.php" );
require_once( $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/includes/image.php" );

$upload_dir = wp_upload_dir();

global $current_user;
get_currentuserinfo();
$logged_in_user = $current_user->ID;

// Some default blueimp code

// First few lines of the __construct function
global $upload_dir;
$this->options = array(
    'script_url' => $this->get_full_url(),
    'upload_dir' => $upload_dir['path'] . '/',
    'upload_url' => $upload_dir['url'] . '/',

// A lot more default script code

// The handle_file_upload function with WordPress customizations
protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
    $index = null, $content_range = null) {
    global $logged_in_user;
    $file = new stdClass();
    $file->name = $this->get_file_name($uploaded_file, $name, $size, $type, $error,
    $index, $content_range);
    $file->size = $this->fix_integer_overflow(intval($size));
    $file->type = $type;
    if ($this->validate($uploaded_file, $file, $error, $index)) {
        $this->handle_form_data($file, $index);
        $upload_dir = $this->get_upload_path();
        if (!is_dir($upload_dir)) {
            mkdir($upload_dir, $this->options['mkdir_mode'], true);
        }
        $file_path = $this->get_upload_path($file->name);
        $append_file = $content_range && is_file($file_path) &&
            $file->size > $this->get_file_size($file_path);

        if ($uploaded_file && is_uploaded_file($uploaded_file)) {
            // multipart/formdata uploads (POST method uploads)
            if ($append_file) {
                file_put_contents(
                    $file_path,
                    fopen($uploaded_file, 'r'),
                    FILE_APPEND
                );
            } else {
                move_uploaded_file($uploaded_file, $file_path);
            }
        } else {
            // Non-multipart uploads (PUT method support)
            file_put_contents(
                $file_path,
                fopen('php://input', 'r'),
                $append_file ? FILE_APPEND : 0
            );
        }
        $file_size = $this->get_file_size($file_path, $append_file);
        if ($file_size === $file->size) {
            $file->url = $this->get_download_url($file->name);
            if ($this->is_valid_image_file($file_path)) {
                $this->handle_image_file($file_path, $file);
            }
        } else {
            $file->size = $file_size;
            if (!$content_range && $this->options['discard_aborted_uploads']) {
                unlink($file_path);
                $file->error = $this->get_error_message('abort');
            }
        }
        $this->set_additional_file_properties($file);
    }

    $attachment = array(
        'post_mime_type'    => $file->type,
        'post_title'        => preg_replace( '/\.[^.]+$/', '', basename( $file_path )),
        'post_content'      => '',
        'post_author'       => $logged_in_user,
        'post_status'       => 'inherit',
        'post_type'         => 'attachment',
        'guid'              => $this->options['upload_url'] . $name
    );

    $attachment_id = wp_insert_attachment( $attachment, $file_path );

    // Generate the attachment data
    $attachment_data = wp_generate_attachment_metadata( $attachment_id, $file_path );

    // Update the attachment metadata
    wp_update_attachment_metadata( $attachment_id, $attachment_data );

    return $file;
}

Aktualisierte Ausgabe:

Zunächst scheint dies zu funktionieren ... aber wenn Sie den wp_posts database table überprüfen, wurde nichts hinzugefügt. Wenn Sie in den media library schauen, wird nur das hochgeladene Bild angezeigt (keines der anderen Bilder, die sich in der Datenbank befinden) und die folgenden Fehler werden im error_log angezeigt:

PHP Warning: strpos() expects parameter 1 to be string, object given in /Applications/MAMP/htdocs/wordpress/wp-includes/post.php on line 188
PHP Warning: preg_match() expects parameter 2 to be string, object given in /Applications/MAMP/htdocs/wordpress/wp-includes/post.php on line 188
PHP Catchable fatal error: Object of class stdClass could not be converted to string in /Applications/MAMP/htdocs/wordpress/wp-includes/post.php on line 189

Ich verstehe die Tatsache, dass die Variable, die ich aufrufe, ein Objekt ist, keine Zeichenfolge, aber ich weiß nicht, wo ich sie platzieren soll.

Jede Hilfe ist dankbar, habe alles versucht, was mir einfällt. Wirklich müssen dies so schnell wie möglich zum Laufen bringen! Vielen Dank

2
Designer 17

Nachdem ich Tests gemacht und mit einem Freund gearbeitet hatte, konnte ich eine Lösung finden:

Ändern Sie einfach, wie die Funktion get_full_url die URL erfasst:

// Go to 'protected function get_full_url()'
// Line 200 (approx. if you've made the same changes stated above) in UploadHandler.php 
// change this line, should be the last one in the function
substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/'));

// After editing this is what you should end with
substr($_SERVER['DOCUMENT_ROOT'],0, strrpos($_SERVER['DOCUMENT_ROOT'], '/'));

Dies funktionierte für mich (zusammen mit dem benutzerdefinierten Code aus der Frage) und ermöglichte mir, den Demo-Uploader in einer benutzerdefinierten WordPress-Seite zu verwenden. Erstellen eines Frontend-Upload-Formulars! Hoffe das hilft jemandem.

1
Designer 17