it-swarm-vi.com

Cách thêm tệp đính kèm hình ảnh để đăng từ một khóa meta đơn (Wooc Commerce)

Tôi đang sử dụng Wooc Commerce cho các sản phẩm. Tất cả các sản phẩm được nhập tự động bởi một plugin. Hiện tại khi tôi muốn đính kèm một hình ảnh vào một sản phẩm (một loại bài đăng) tôi phải sử dụng "Hình ảnh nổi bật" để hiển thị hình ảnh trên trang web. Đây là tất cả các công việc thủ công.

Khi tôi lưu hình ảnh, hình ảnh được lưu vào cơ sở dữ liệu trong bảng wp_posts, post_type là "tệp đính kèm", post_mime_type là "image/jpeg", post_parent là 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            

Tôi phải thêm mã nào vào hàm.php của mình rằng nếu một bài đăng được lưu hoặc cập nhật thì nó sử dụng giá trị trong khóa meta "_image" để đính kèm hình ảnh vào bài đăng như mẫu ở trên?

1
jochem

Tôi đã nhận được nó bằng cách sử dụng mã sau đây:

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