J'ai enfin !! J'ai obtenu cette chose que j'ai essayé environ 12 fois de faire et 12 façons différentes, mais finalement je l'ai fait fonctionner, en quelque sorte.
J'ai créé une métabox personnalisée pour télécharger et attacher des images aux publications, et cela ne vous oblige pas à utiliser l'horrible uploader de médias épais intégré à WP. Je déteste cette chose. Non, ce que j'ai fait n'est qu'un groupe d'entrées (titre, description, fichier), que vous pouvez également dupliquer, pour ajouter des pièces jointes supplémentaires si vous le souhaitez. Vous remplissez donc les champs, sélectionnez une image à télécharger et enregistrez le brouillon ou publiez le message. Une fois qu'il y a des pièces jointes ajoutées à un message, la métabox affichera les champs de saisie, ainsi qu'une image d'aperçu de l'image jointe pour chaque pièce jointe que vous avez ajoutée. Les champs de titre et de description sont utilisés pour générer les métadonnées du fichier, rien n'est enregistré en tant que post_meta, à ma connaissance. C'est actuellement tout ce que j'ai obtenu jusqu'à présent.
Je dois faire en sorte que lorsque vous enregistrez / publiez un article, transférez / créez les fichiers joints, il créera les trois tailles d'image comme le ferait le téléchargeur wp par défaut, miniature, moyen, grand et conservant également l'image pleine taille . Si c'est possible d'une manière ou d'une autre. Sinon, j'aimerais utiliser autrement add_image_size()
pour créer / définir de nouvelles tailles personnalisées, et les générer de cette façon à la place, lors du téléchargement.
Je ne sais pas quelle fonction est la plus idéale à utiliser dans ce cas, peut-être que la image_make_intermediate_size()
fonction serait meilleure, ou wp_create_thumbnail()
ou wp_crop_image()
... qui sait !!
Je ne peux pas comprendre comment procéder, si j'ai besoin d'exécuter la wp_handle_upload()
fonction pour chacun, ou peut-être quelque chose impliquant la wp_generate_attachment_metadata()
fonction. C'est déroutant pour moi, car les 3 tailles d'image doivent être associées en tant que variantes de la même pièce jointe, et comment s'y prendre.
J'ai parcouru le Web, lu la source de chaque fichier lié à wp media / upload / image, et joué avec à peu près toutes les fonctions disponibles pour le téléchargement de médias et je ne trouve pas comment WP crée les 3 tailles d'image n'importe où, ou comment faire moi-même.
Dans wp-includes / media.php, la image_resize()
fonction semble préférable car c'est exactement ce qu'elle devrait être. Je n'arrive pas à comprendre pour la vie de moi ce que je manque ou que j'ai essayé de faire mais j'ai mal fait les vignettes de l'image.
Voici ma fonction de travail qui fait les wp_handle_upload()
choses et les choses, mais elle doit également créer le pouce 100px, et faire une version redimensionnée de l'image qui est de largeur maximale comme 500px, et enregistrée en tant que nouveaux fichiers de celle téléchargée.
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'] );
}
}
Toute personne capable de m'aider à résoudre ce problème afin que cela fonctionne correctement serait appréciée. J'ai passé tellement d'heures ridicules, d'innombrables fois, à essayer de développer cette chose et la documentation est nul, et il n'y a pas vraiment de bons articles nulle part sur la façon de le faire.
Merci