Ich habe endlich !! Ich habe dieses Ding ungefähr 12 Mal ausprobiert und 12 verschiedene Arten, aber es hat endlich funktioniert, ... irgendwie.
Ich habe eine benutzerdefinierte Metabox für das Hochladen und Anhängen von Bildern an Beiträge erstellt, und Sie müssen nicht den in WP integrierten schrecklichen Thickbox-Medien-Uploader verwenden. Ich hasse das Ding. Nein, ich habe nur eine Gruppe von Eingaben (Titel, Beschreibung, Datei) vorgenommen, die Sie auch duplizieren können, um zusätzliche Anhänge hinzuzufügen, wenn Sie möchten. Füllen Sie also die Felder aus, wählen Sie ein Bild zum Hochladen aus und speichern Sie den Entwurf oder veröffentlichen Sie den Beitrag. Sobald einem Beitrag Anhänge hinzugefügt wurden, werden in der Metabox die Eingabefelder zusammen mit einem Vorschaubild des angehängten Bildes für jeden von Ihnen hinzugefügten Anhang angezeigt. Die Titel- und Beschreibungsfelder werden verwendet, um die Metadaten der Datei zu generieren. Es wird nichts als Post_Meta gespeichert, von dem ich weiß. Das ist derzeit alles, was ich bisher zu arbeiten bekommen habe.
Ich muss es so machen, dass beim Speichern / Veröffentlichen eines Beitrags, beim Hochladen / Erstellen der Anhangsdateien die drei Bildgrößen erstellt werden, wie es der standardmäßige WP-Uploader tun würde: Miniaturansicht, mittelgroß, groß und auch das Bild in voller Größe beibehalten . Wenn das irgendwie möglich ist. Andernfalls würde ich gerne add_image_size()
neue benutzerdefinierte Größen erstellen / definieren und diese stattdessen beim Hochladen auf diese Weise generieren.
Ich bin mir nicht sicher, welche Funktion in diesem Fall am besten geeignet ist, vielleicht wäre die image_make_intermediate_size()
Funktion besser, oder wp_create_thumbnail()
oder wp_crop_image()
... wer weiß !!
Ich kann nicht herausfinden, wie ich das machen soll, wenn ich die wp_handle_upload()
Funktion für jede einzelne ausführen muss oder vielleicht etwas, das die wp_generate_attachment_metadata()
Funktion betrifft . Es ist verwirrend für mich, da die 3 Bildgrößen als Varianten desselben Anhangs zugeordnet werden sollen, und wie man das macht.
Ich habe das Web durchsucht, die Quelle aller WP-Medien- / Upload- / Bild-bezogenen Dateien gelesen und mit nahezu jeder Funktion gespielt, die für das Hochladen von Medien zur Verfügung steht, und kann nicht feststellen, wie WP die 3 Bildgrößen an einem beliebigen Ort erstellt oder wie dies zu tun ist es selbst.
In wp-includes / media.php image_resize()
sieht die Funktion so aus, als wäre sie am besten, da sie genau so ist, wie sie sein sollte. Ich kann für mein Leben einfach nicht herausfinden, was zum Teufel ich vermisse oder was ich versucht habe, aber falsch gemacht habe, um die Miniaturbilder zu erstellen.
Hier ist meine Arbeitsfunktion, die das wp_handle_upload()
Zeug und die Dinge erledigt , aber sie muss auch den 100px-Thumb erstellen und eine Version des Bildes mit einer maximalen Breite von 500px erstellen und als neue Dateien des hochgeladenen Bildes speichern.
function update_attachment(){
global $post;
wp_update_attachment_metadata( $post->ID, $_POST['a_image'] );
if( !empty( $_FILES['a_image']['name'] )) { //New upload
require_once( ABSPATH . 'wp-admin/includes/file.php' );
$override['action'] = 'editpost';
$url = wp_handle_upload( $_FILES['a_image'], $override );
// $medium = image_make_intermediate_size( $uploaded_file['url'], 500, 400, true );
// $thumb = = image_make_intermediate_size( $uploaded_file['url'], 100, 100, true );
if ( isset( $file['error'] )) {
return new WP_Error( 'upload_error', $file['error'] );
}
$array_type = wp_check_filetype
$allowed_file_types = array('image/jpg','image/jpeg','image/gif','image/png');
$name_parts = pathinfo( $name );
$name = trim( substr( $name, 0, - ( 1 + strlen( $name_parts['extension'] )) ));
$type = $file['type'];
$file = $file['file'];
$title = $_POST['a_title'] ? $_POST['a_title'] : $name;
$content = $_POST['a_desc']
$post_id = $post->ID;
$attachment = array(
'post_title' => $title,
'post_type' => 'attachment',
'post_content' => $content,
'post_parent' => $post_id,
'post_mime_type' => $type,
'guid' => $url['url']
);
// Save the data
$id = wp_insert_attachment( $attachment, $_FILES['a_image'][ 'file' ]/*, $post_id - for post_thumbnails*/);
if ( !is_wp_error( $id )) {
$attach_meta = wp_generate_attachment_metadata( $id, $uploaded_file['url'] );
wp_update_attachment_metadata( $attach_id, $attach_meta );
}
update_post_meta( $post->ID, 'a_image', $uploaded_file['url'] );
}
}
Jeder, der mir helfen kann, das Problem zu beheben, damit es richtig funktioniert, wäre begeistert. Ich habe so viele lächerliche, unzählige Stunden damit verbracht, dieses Ding zu entwickeln, und die Dokumentation ist zum Kotzen, und es gibt nirgendwo wirklich gute Beiträge, wie man es macht.
Vielen Dank
quelle
Antworten:
Hallo @jaredwilli:
Kumpel! Tapfere Bemühungen und gute Arbeit. Alles in allem könnte es eine großartige Ergänzung zu WordPress sein.
Sie waren so nah dran, aber Sie hatten irgendwo zwischen 5 und 10 kleine Fehlannahmen oder Code, der so aussah, als hätten Sie ihn gestartet, aber nicht darauf zurückgekommen, weil er nicht funktionierte. Ich habe Ihre Funktion nur so weit überarbeitet, wie ich es korrigieren musste. Die Lösung folgt und ich überlasse den direkten Vergleich Ihrer Person oder einer weniger ausgebrannten Person. :)
Hey, warum gönnst du dir nicht eine Kopie von PhpStorm ? Du hättest das leicht selbst lösen können, du warst sooo nah dran, wenn du nur den Code durchgegangen hättest, wie ich es jetzt kann. Verschwenden Sie in diesem Fall keine Zeit mit dem sehr fehlerhaften XDEBUG und laden Sie stattdessen Zend Debugger herunter .
PS Das ist meine frühere Antwort. Ich habe dies gepostet, bevor mir klar wurde, wonach Jared fragte. Es ist richtig, hat aber nichts mit seiner Frage zu tun. :)
Ich denke, was Sie suchen, ist
add_image_size()
:Beispielsweise:
Durch die Einstellung dieses WordPress werden diese Größen automatisch erstellt. Was ist das, was du brauchst?
quelle
wp_generate_attachment_metadata()
macht das, wennadd_image_size()
gesetzt ist. Vielleicht hat er einfach nicht versuchtadd_image_size()
, die Bildgrößen einzustellen?Wenn ich Ihre Frage verstehe, müssen Sie zuerst die Liste der Größen wie folgt abrufen:
Dies gibt ein Array aller registrierten Bildgrößen zurück (Standard: groß, mittel, Miniaturansicht, jede benutzerdefinierte Größe, die mit "add_image_size ()" registriert wurde). Dann müssen Sie nur eine Schleife durch jede der Größen ziehen und ein Bild für diese Größe wie erstellen Dies:
Ersetzen Sie $ file durch den hochgeladenen Dateipfad und $ crop durch true oder false, wenn Sie das Bild auf die neuen Dimensionen zuschneiden möchten oder false, um die Größe zu ändern.
quelle
wp_generate_attachment_metadata()
in ansehen, werden/wp-admin/includes/image.php
Sie sehen, dass er genau das tut, was Sie oben gepostet haben, und er heißt bereits so. Wenn diese also nicht erstellt werden, hat er vielleicht ein Plugin, das sie mithilfe des Hooks filtert'intermediate_image_sizes_advanced'
?