J'écris un thème / plugin personnalisé dans lequel je dois télécharger des images par programme à partir de certaines pages Web dans le dossier de téléchargement, puis les insérer dans le cadre de la publication.
Donc, j'ai pu trouver l'URL de l'image par programme, puis je dois les enregistrer dans le dossier de téléchargement sous wp-content, mais ce dossier a une structure de dossier WordPress spécifique à l'intérieur pour les images enregistrées.
Maintenant, ma question est, existe-t-il une API ou une fonction ou une méthode WordPress qui me permettra de télécharger des images sur le Web et de les enregistrer dans le dossier de téléchargement? Et si oui, qu'est-ce que c'est.
Sinon, que dois-je faire pour enregistrer ces images?
Jusqu'à présent, je fais ça
$filetype = wp_check_filetype(basename($image_file_name), null );
$upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $upload_dir['url'] . '/' . basename( $image_file_name ),
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($image_file_name)),
'post_content' => '',
'post_status' => 'inherit'
);
$attachment_id = wp_insert_attachment( $attachment, $image_file_name, $post_id );
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $image_file_name );
wp_update_attachment_metadata( $attachment_id, $attachment_data );
set_post_thumbnail( $post_id, $attachment_id );
Mais le code ci-dessus me donne l'erreur suivante
imagejpeg(http://wscdn.bbc.co.uk/worldservice/assets/images/2013/07/21/130721173402_egypts_new_foreign_minister_fahmy_304x171_reuters-150x150.jpg): failed to open stream: HTTP wrapper does not support writeable connections in C:\dev\wordpress\pterodactylus\wp-includes\class-wp-image-editor.php on line 334
Et après une enquête plus approfondie, il semble que l'erreur soit causée par
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $image_file_name );
Et après une enquête encore plus approfondie, la documentation pour les wp_insert_attachment()
États qui The file MUST be on the uploads directory
concerne la$image_file_name
Alors, comment puis-je télécharger une image et l'enregistrer correctement dans mon message?
Merci beaucoup.
la source
Réponses:
J'ai récemment dû le faire via un script cron nocturne pour un flux de médias sociaux. $ parent_id est l'ID de la publication à laquelle vous souhaitez joindre l'image.
ex:
la source
Vous n'avez pas publié le code utilisé pour récupérer et enregistrer l'image, il est donc impossible de dire où est l'erreur.
Essayez ce code pour saisir et enregistrer l'image:
Ensuite, utilisez simplement ces fonctions en combinaison avec votre code, comme ceci:
Rappelez-vous également que vous devez inclure wp-admin / includes / image.php dans votre code pour que la fonction
wp_generate_attachment_metadata()
fonctionne, voir le CodexJ'espère que cette aide, mais veuillez noter que tout le code ici n'est pas testé.
la source
if ( $mirror['error'] ) return false; //maybe log error
. En outre il n'y a pas de vérification si le contenu récupéré est en fait une image$filetype = wp_check_filetype($filename, NULL ); if ( ! substr_count($filetype['type'], 'image') ) return false;
Vous pouvez utiliser cette fonction pour télécharger à distance une image vers un dossier de téléchargements et la définir comme image sélectionnée.
Usage:
la source
Utilisez simplement la fonction wp (v2.6.0 +) par défaut:
la source