(getriggers) Hochladen von Bildern von einer benutzerdefinierten Seite mit dem blueim Uploader?

Ich arbeite mit einem Frontend-Upload-Formular, das blueimp jQuery-File-Uploader verwendet, um alle schweren Arbeiten zu erledigen … aber nachdem ich Blueimp versucht habe, die notwendige WordPress-functionalität hinzuzufügen, habe ich angefangen, Fehler zu finden, die ich nicht nachvollziehen kann aus.

Aktualisieren / Mein Code

HTML (das Frontend-Formular):

Add files...

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

PHP (relative Teile meines Upload-Skripts … Ich verwende das Standard- 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:

Zuerst scheint das zu funktionieren … aber wenn Sie die wp_posts database table überprüfen, wurde nichts hinzugefügt. Wenn Sie in der media library , wird nur das hochgeladene Bild error_log (keines der anderen Bilder, die sich in der database befinden) und die folgenden Fehler werden in der error_log :

 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 anrufe, ein Objekt ist, keine Zeichenkette, aber ich bin mir nicht sicher, was ich an dieser Stelle einfügen soll.

Jede Hilfe wird geschätzt, habe alles versucht, was mir einfällt. Wirklich müssen Sie so schnell wie möglich! Vielen Dank

Solutions Collecting From Web of "(getriggers) Hochladen von Bildern von einer benutzerdefinierten Seite mit dem blueim Uploader?"

Nach den Tests und der Arbeit mit einem Freund konnte ich eine Lösung finden:

Ändern Sie einfach, wie die function get_full_url die URL get_full_url :

 // 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 ist, was für mich (zusammen mit dem angepassten Code aus der Frage) funktionierte, so dass ich den Demo-Uploader in einer benutzerdefinierten WordPress-Seite verwenden kann. Erstellen eines Frontend-Upload-Formulars! Hoffe, das hilft jemandem.

Ich habe vor kurzem eine WordPress-Seite so modifiziert, dass sie das Datei-Upload-Plugin enthält. Auf einer Standalone-Testseite funktionierte die Steuerung – ebenfalls modifiziert aus der Basisplus-Probe – gut. In WordPress-Uploads fehlgeschlagen. Ich habe den Formular-Wrapper entfernt, und das hat ihn behoben.