我正在制作一个插件,它可以从外部API获取数据并将其存储在数据库中。我选择自定义插件的原因是,我找不到任何现有的插件可以完成我所需要的任务。我有一个功能,可以验证请求并从API get_latest_data()
获取所需的数据,它是存储数据库内的数据。但问题来了,当我试图保存图像。在数据库内,我可以看到一个文件正在创建和WordPress Jmeter 板的媒体选项卡内,我可以看到一个文件,但图像不加载或渲染。下面是我的函数,应该存储图像:
function save_media_as_attachment($media_url, $post_id) {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
if (empty($media_url)) {
return false;
}
$temp_file = download_url($media_url);
if (is_wp_error($temp_file)) {
return false;
}
$file_name = basename($media_url);
$file_extension = pathinfo($file_name, PATHINFO_EXTENSION);
$post_mime_type = 'image/jpeg'; // Default to JPEG
if (strtolower($file_extension) === 'jpg' || strtolower($file_extension) === 'jpeg') {
$post_mime_type = 'image/jpeg';
} elseif (strtolower($file_extension) === 'png') {
$post_mime_type = 'image/png';
} elseif (strtolower($file_extension) === 'mp4') {
$post_mime_type = 'video/mp4';
}
$attachment = array(
'post_title' => sanitize_file_name($file_name),
'post_content' => '',
'post_status' => 'inherit',
'post_mime_type' => $post_mime_type,
);
$attachment_id = wp_insert_attachment($attachment, $temp_file, $post_id);
if (!is_wp_error($attachment_id)) {
$attachment_data = wp_generate_attachment_metadata($attachment_id, $temp_file);
wp_update_attachment_metadata($attachment_id, $attachment_data);
update_post_meta($attachment_id, '_wp_attached_file', $file_name);
@unlink($temp_file);
return $attachment_id;
}
@unlink($temp_file);
return false;
}
字符串
我已经仔细检查了我从API接收的媒体,它们都很好。我还检查了MIME类型和文件权限。
1条答案
按热度按时间ldxq2e6h1#
我在不同的项目中遇到过这个问题。我在下面分享我通常用来处理这个问题的函数。
字符串