En utilisant le code ci-dessous, je peux créer un nouveau message et télécharger une image dans le répertoire upload
de wordpress en tant que pièce jointe via les données soumises du formulaire.
$new_post = array(
'post_title' => $title,
'post_content' => $content,
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => $user_ID,
'post_type' => 'post',
'post_category' => array(3)
);
$post_id = wp_insert_post($new_post);
if (!function_exists('wp_generate_attachment_metadata')){
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
}
if ($_FILES) {
foreach ($_FILES as $file => $array) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
return "upload error : " . $_FILES[$file]['error'];
}
$attach_id = media_handle_upload( $file, $post_id );
}
}
Je souhaite insérer une image à publier et non remplacer l'image sélectionnée. La fonction set_post_thumbnail()
n'est pas appropriée. J'ai trouvé que si j'insère manuellement une image à publier, elle générera le code HTML, comme par exemple:
<a href="http://192.168.1.12/wp/wp-content/uploads/2012/09/H530U_08.jpg"><img class="alignnone size-medium wp-image-136" title="HARP_SH530U_0" src="http://192.168.1.12/wp/wp-content/uploads/2012/09/HARP_SH530U_08-300x167.jpg" alt="" width="300" height="167" /></a>
Alors, quelle API fournirait la fonction d’insertion d’image à publier, aimerait générer le code HTML ci-dessus et ne pas remplacer l’image présentée?
Merci
Vous pouvez définir l’image téléchargée comme miniature de publication via,
update_post_meta($post_id,'_thumbnail_id',$attach_id);
Exemple...
if ($_FILES) {
foreach ($_FILES as $file => $array) {
if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
return "upload error : " . $_FILES[$file]['error'];
}
$attach_id = media_handle_upload( $file, $post_id );
}
}
update_post_meta($post_id,'_thumbnail_id',$attach_id);
Si vous téléchargez un tableau d’images, vous voudrez peut-être spécifier quelle image en référençant la clé,
$file[0] //for the first image in the array
$file[1] //for the second image in the array
$file[2] //for the third image in the array
etc...
... mais cela ne devrait pas être nécessaire lors du téléchargement d'une seule image.
En fonction de vos commentaires, si vous souhaitez insérer l'image au début ou avant votre contenu, il est probablement préférable de filtrer la fonction the_content
comme suit:
add_filter( 'the_content', 'insert_img_to_post', 20 );
function insert_img_to_post( $content ) {
global $post;
$post_id = $post->ID;
if ( is_single() )
$content = sprintf(
'<img class="post-icon" src="%s" alt="Post icon" title=""/>',
wp_get_attachment_url(get_post_meta( $post_id, '_thumbnail_id', true )),
$content
);
return $content;
}
... ajoutez cette fonction en tant que fonction/filtre distinct dans votre fichier functions.php. N'essayez pas de l'intégrer dans votre fonction wp_insert_post
car cela ne fonctionnera pas. Cela est conçu pour être exécuté seul, en s’accrochant au filtre the_content
, en insérant l’image en haut de la publication avant le contenu, puis en ajoutant le contenu situé en dessous.
Cela fonctionne actuellement sur une seule page de publication (is_single
) si vous souhaitez qu'elle s'exécute sur quelque chose d'autre, comme une page, puis remplacez-la par is_page
ou par toute autre balise conditionnelle répondant à vos besoins.