Parfois, vous devez ajouter dynamiquement une image vedette à une publication ou un type de publication personnalisé à partir d’un autre serveur que celui que votre installation WordPress exécute. Et vous êtes confronté à un problème commun : comment le faire ?
Bien sûr, dans ce cas, vous devez récupérer l’image en vedette sur le deuxième serveur, la télécharger sur votre propre serveur, dans le dossier de téléchargement, et l’attribuer au bon message. Dans la première étape, nous allons créer un nouveau message de manière dynamique, puis nous traiterons de l’image en vedette.
Étape 1 : créer une publication de manière dynamique
Pour créer dynamiquement un article, vous devez utiliser le wp_insert_post() fonction. Vous pouvez placer le code ci-dessous dans une instruction « IF », sinon chaque fois qu’une page est chargée, elle créera un nouveau message. Pas si pratique que ça.
// Register Post Data
$post = array();
$post['post_status'] = 'publish';
$post['post_type'] = 'post'; // can be a CPT too
$post['post_title'] = 'My New Post';
$post['post_content'] = 'My new post content';
$post['post_author'] = 1;
// Create Post
$post_id = wp_insert_post( $post );
L’exécution de ce code créera simplement un nouveau message. Il est maintenant temps d’ajouter l’image en vedette.
Étape 2 : ajouter l’image en vedette
Pour ajouter l’image sélectionnée à partir d’une URL, nous devons utiliser certaines fonctions WordPress :
- wp_upload_dir() : pour récupérer le chemin du dossier de l’uploader
- wp_mkdir_p() : pour créer un dossier et définir des autorisations
- wp_check_filetype() : pour vérifier le format des pièces jointes
- désinfecter_nom_fichier() : pour formater le nom du fichier joint
- wp_insert_attachment() : pour créer une pièce jointe
- wp_generate_attachment_metadata() : pour générer des métadonnées de pièce jointe
- wp_update_attachment_metadata() : pour mettre à jour les métadonnées des pièces jointes
- set_post_thumbnail() : pour attribuer une pièce jointe en tant qu’image de publication
Et maintenant voici le code. J’ai commenté chaque action afin que vous puissiez voir exactement ce qui se passe lorsque ce script est en cours d’exécution.
// Add Featured Image to Post
$image_url = 'http://s.wordpress.org/style/images/wp-header-logo.png'; // Define the image URL here
$image_name = 'wp-header-logo.png';
$upload_dir = wp_upload_dir(); // Set upload folder
$image_data = file_get_contents($image_url); // Get image data
$unique_file_name = wp_unique_filename( $upload_dir['path'], $image_name ); // Generate unique name
$filename = basename( $unique_file_name ); // Create image file name
// Check folder permission and define file location
if( wp_mkdir_p( $upload_dir['path'] ) ) {
$file = $upload_dir['path'] . '/' . $filename;
} else {
$file = $upload_dir['basedir'] . '/' . $filename;
}
// Create the image file on the server
file_put_contents( $file, $image_data );
// Check image file type
$wp_filetype = wp_check_filetype( $filename, null );
// Set attachment data
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name( $filename ),
'post_content' => '',
'post_status' => 'inherit'
);
// Create the attachment
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );
// Include image.php
require_once(ABSPATH . 'wp-admin/includes/image.php');
// Define attachment metadata
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );
// Assign metadata to attachment
wp_update_attachment_metadata( $attach_id, $attach_data );
// And finally assign featured image to post
set_post_thumbnail( $post_id, $attach_id );
Ce qui est intéressant dans ce code, c’est qu’on peut le placer dans une boucle. Par exemple pour importer des articles à partir d’un fichier CSV ou d’un fichier XML. C’est vraiment puissant et vraiment utile, mais n’oubliez pas une chose : n’utilisez jamais ce script dans votre fichier functions.php sans placer une balise conditionnelle auparavant, sinon vous obtiendrez des centaines de nouveaux messages créés en quelques minutes !
Vous avez trouvé cet extrait utile ? S’il vous plaît laissez un commentaire et dites-nous ce que vous avez créé à partir de cet extrait !