Parfois, vous devez ajouter dynamiquement une image sélectionnée à un article ou un type de publication personnalisé à partir d’un autre serveur que celui que votre installation WordPress est en cours d’exécution. Et vous êtes confronté à un problème commun: comment faire?

Bien sûr, dans ce cas, vous devez récupérer l’image sélectionnée sur le deuxième serveur, la télécharger sur votre propre serveur, dans le dossier de téléchargement, et l’attribuer à la bonne publication. Dans un premier temps, nous allons créer un nouveau post de manière dynamique, puis nous traiterons de l’image présentée.

Étape 1: créer une publication dynamiquement

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.

// 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 sélectionnée.

Étape 2: ajoutez l’image en vedette

Pour ajouter l’image sélectionnée à partir d’une URL, nous devons utiliser certaines fonctions WordPress:

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 que vous pouvez le placer dans une boucle. Par exemple pour importer des publications à 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 avant sinon vous obtiendrez des centaines de nouveaux articles créés en quelques minutes!

Vous avez trouvé cet extrait utile? Veuillez laisser un commentaire et nous dire ce que vous avez créé à partir de cet extrait!

Share: