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
la source
Réponses:
Salut @jaredwilli:
Mec! Effort vaillant et beau travail. Dans l'ensemble, cela pourrait être un excellent ajout à WordPress.
Vous étiez si proche, mais vous aviez quelque part entre 5 et 10 petites hypothèses ou code qui semblent avoir démarré mais ne sont pas revenus car cela ne fonctionnait pas. J'ai retravaillé votre fonction autant que nécessaire pour la corriger. La solution suit, et je vais laisser la comparaison côte à côte à votre ou à quelqu'un de moins épuisé. :)
Hé, pourquoi ne pas faire des folies et vous procurer une copie de PhpStorm ? Vous auriez pu facilement résoudre ce problème vous-même, vous étiez tellement proche, si vous aviez pu suivre le code comme je le peux maintenant. Si vous le faites, ne perdez pas votre temps sur le très buggé XDEBUG et téléchargez plutôt Zend Debugger .
PS Ceci est mon ancienne réponse. J'ai posté ceci avant de réaliser ce que Jared demandait exactement. C'est correct, mais sans rapport avec sa question. :)
Je pense que ce que vous recherchez est
add_image_size()
:Par exemple:
En définissant ce WordPress créera ces tailles automatiquement. De quoi avez-vous besoin?
la source
wp_generate_attachment_metadata()
fait cela siadd_image_size()
est définie. Peut-être qu'il n'a tout simplement pas essayé d'utiliseradd_image_size()
pour définir les tailles d'image?si je comprends que vous vous posez des questions, vous devez d'abord obtenir la liste des tailles comme ceci:
cela renvoie un tableau de toutes les tailles d'image enregistrées (par défaut: grand, moyen, miniature, toute taille personnalisée enregistrée à l'aide de "add_image_size ()" alors tout ce que vous avez à faire est de parcourir chaque taille et de créer une image pour cette taille comme cette:
remplacez $ file par le chemin du fichier téléchargé et $ crop avec true ou false si vous souhaitez recadrer l'image aux nouvelles dimensions ou false pour redimensionner.
la source
wp_generate_attachment_metadata()
en/wp-admin/includes/image.php
vous verrez qu'il fait exactement ce que vous avez publié ci - dessus, et il est déjà appelé cela. Donc, si ceux-ci ne sont pas créés, il a peut-être un plugin qui les filtre à l'aide du'intermediate_image_sizes_advanced'
crochet?