web-dev-qa-db-fra.com

Comment ajouter une pièce jointe à une publication à partir d'une seule clé méta (Woocommerce)

J'utilise Woocommerce pour les produits. Tous les produits sont importés automatiquement par un plugin. Actuellement, lorsque je souhaite joindre une image à un produit (un type de publication), je dois utiliser "Image en vedette" pour afficher l'image sur le site Web. C'est tout le travail manuel.

Une fois que j'ai sauvegardé l'image, l'image est sauvegardée dans la base de données de la table wp_posts, le post_type est "attachment", le post_mime_type est "image/jpeg", le post_parent est le postID.

ID    post_author   post_title      post_status post_name      post_parent guid                            post_type   post_mime_type
200   1             Niceimagename   inherit     Niceimagename  116         http://domain.com/imageurl      attachment  image/jpeg            

Quel code dois-je ajouter à mon functions.php que si un message est enregistré ou mis à jour, il utilise la valeur dans la clé méta "_image" pour attacher l'image au message comme dans l'exemple ci-dessus?

1
jochem

Je l'ai maintenant en utilisant le code suivant:

//featured image from postmeta
function postmeta_img_update() {
global $post;
// If Custom Post Meta Field for a Image/Thumnail Exists
if( get_post_meta($post->ID, "_image", true):

// Get Image Location and File Extention
$img = get_post_meta($post->ID, "_image", true);
$ext = substr(strrchr($img,'.'),1);

// WordPress Upload Directory to Copy to (must be CHMOD to 777)
$uploads = wp_upload_dir();
$copydir = $uploads['path']."/";

// Code to Copy Image to WordPress Upload Directory (Server Must Support file_get_content/fopen/fputs)
$data = file_get_contents($img);
$filetitle = strtolower(str_replace(array(' ', '-', '.', '(', ')', '!', '@', '#', '$', '%', '^', '&', '*', '_', '=', '+', '/', '"'), "-", get_the_title()));
$file = fopen($copydir . "$filetitle-$post->ID.$ext", "w+");
fputs($file, $data);
fclose($file);
// Insert Image to WordPress Media Libarby
$filepath = $uploads['path']."/$filetitle-$post->ID.$ext";

$wp_filetype = wp_check_filetype(basename($filepath), null );
$attachment = array(
 'post_mime_type' => $wp_filetype['type'],
 'post_title' => get_the_title(),
 'post_content' => 'Image for '.get_the_title(),
 'post_status' => 'inherit'
);

wp_insert_attachment( $attachment, $filepath, $post->ID);

// Get Attachment ID for Post
global $wpdb; $attachment_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_parent = '$post->ID' AND post_status = 'inherit' AND post_type='attachment' ORDER BY post_date DESC LIMIT 1");
// Attached Image as Featured Thumbnail in Post
update_post_meta($post->ID, "_thumbnail_id", $attachment_id);

// Removes Custom Meta Field Image URL. This stop this function running again for the updated post.
delete_post_meta($post->ID, "_image");

endif;

}
add_action('the_post','postmeta_img_update');
1
jochem