web-dev-qa-db-ja.com

wp_generate_attachment_metadataは私に空の配列を与える

カスタムの投稿タイプとファイル入力のあるメタボックスがあります。

添付ファイルを挿入することはできますが、添付ファイルのメタデータを更新することはできません。また、エラーを受け取ることもないため、修正方法がわかりません。

これが私のコードです:

$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は空です:(

3
Klian

コメントから:

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 ); 
3
fuxia

これは、ついに私のためにそれを修正したものです:

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;
}
1