web-dev-qa-db-de.com

wp_generate_attachment_metadata gibt mir ein leeres Array

Ich habe einen benutzerdefinierten Beitragstyp und eine Metabox mit einer Dateieingabe.

Ich kann den Anhang einfügen, aber ich kann die Metadaten des Anhangs nicht aktualisieren und weiß nicht, wie ich ihn beheben soll, da ich keinen Fehler erhalte.

Hier ist mein Code:

$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>';

und hier ist die Ausgabe:

96
Array
(
    [name] => one.png
    [type] => image/png
    [tmp_name] => /tmp/phphQ0e2v
    [error] => 0
    [size] => 144555
)
Array
(
)

Wie Sie sehen, ist $ attach_data leer :(

3
Klian

Aus dem Kommentar:

Lassen Sie WordPress einen Dateipfad generieren und verwenden Sie diesen für die nächsten Schritte:

$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

Dies ist, was es für mich endgültig behoben hat:

apply_filters('wp_handle_upload', array(
    'file' => $file_path, 
    'url' => $file_url, 
    'type' => $file_type), 
'upload');

Erläuterung: Ich bin nicht ganz sicher, warum dies den Fehler für mich behoben hat, aber ich gehe davon aus, dass dies entweder mit Plugins zu tun hat, die den Hook wp_handle_upload verwenden, oder dass die Filter dem Anhang Metadaten hinzufügen, die ansonsten fehlen würden die Funktion wp_generate_attachment_metadata.

Volle Funktion:

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