web-dev-qa-db-ja.com

単一のメタキーから投稿に画像の添付ファイルを追加する方法(Woocommerce)

私は製品にWoocommerceを使用しています。すべての製品はプラグインによって自動的にインポートされます。現在、商品に画像を添付したい場合(投稿タイプ)、Webサイトに画像を表示するには「おすすめ画像」を使用する必要があります。これはすべて手作業です。

画像を保存すると、画像はテーブルwp_postsのデータベースに保存され、post_typeは "attachment"、post_mime_typeは "image/jpeg"、post_parentは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            

投稿が保存または更新された場合、上記のサンプルのように、投稿にメタキー "_image"の値を使用するように、どのコードを追加する必要がありますか。

1
jochem

私は今、以下のコードを使ってそれを手に入れました:

//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