カスタムの投稿タイプとファイル入力のあるメタボックスがあります。
添付ファイルを挿入することはできますが、添付ファイルのメタデータを更新することはできません。また、エラーを受け取ることもないため、修正方法がわかりません。
これが私のコードです:
$attach_id = wp_insert_attachment( $attachment, $filename, $post_id );
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
echo $attach_id;
echo '<pre>';
print_r($filename);
echo '</pre>';
echo '<pre>';
print_r($attach_data);
echo '</pre>';
そして、これが出力です。
96
Array
(
[name] => one.png
[type] => image/png
[tmp_name] => /tmp/phphQ0e2v
[error] => 0
[size] => 144555
)
Array
(
)
ご覧のとおり、$ attach_dataは空です:(
コメントから:
WordPressにファイルパスを生成させ、それを次のステップに使用します。
$upload = wp_handle_upload($filename, array('test_form' => false));
$attach_id = wp_insert_attachment( $attachment, $upload['file'], $post_id );
wp_update_attachment_metadata( $attach_id, $attach_data );
これは、ついに私のためにそれを修正したものです:
apply_filters('wp_handle_upload', array(
'file' => $file_path,
'url' => $file_url,
'type' => $file_type),
'upload');
説明:なぜこれが私のためにエラーを修正したのかよくわかりませんが、これはwp_handle_uploadフックを使ったプラグインと関係があるか、フィルタがメタデータを添付に追加するかのどちらかにあります。 wp_generate_attachment_metadata関数.
フル機能:
function add_to_media_lib($file_url, $file_path, $parent_post_id)
{
require_once(ABSPATH . 'wp-admin/includes/image.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
// Check the type of tile. We'll use this as the 'post_mime_type'.
$file_type = wp_check_filetype(basename($file_url), null);
// Get the path to the upload directory.
$wp_upload_dir = wp_upload_dir();
// Prepare an array of post data for the attachment.
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename($file_url),
'post_mime_type' => $file_type['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($file_url)),
'post_content' => '',
'post_status' => 'inherit',
'post_parent' => $parent_post_id
);
// Insert the attachment.
$attach_id = wp_insert_attachment($attachment, $file_url, $parent_post_id);
// apply filters (important in some environments)
apply_filters('wp_handle_upload', array('file' => $file_path, 'url' => $file_url, 'type' => $file_type), 'upload');
// Generate the metadata for the attachment, and update the database record.
if ($attach_data = wp_generate_attachment_metadata($attach_id, $file_path)) {
wp_update_attachment_metadata($attach_id, $attach_data);
} else {
echo '<div id="message" class="error"><h1>Failed to create PDF-thumbnail Meta-Data</h1><pre>' . print_r($attach_data) . '</pre></div>';
}
return $attach_id;
}