WordPress – Programmatisches Hinzufügen von Produkten, die keine Miniaturansichten generieren
Lesezeit: 3 Minuten
Daniel
Ich erstelle einen benutzerdefinierten CSV-Importer für einen Kunden und die Bilder werden hinzugefügt, aber die Miniaturansichten werden nicht richtig generiert. Nach der Verwendung eines Plugins wie Regenerate Thumbnails werden sie korrekt angezeigt.
Hier ist der Code, in dem ich den Anhang hinzufüge und mit dem Beitrag verlinke.
Wenn Sie sagen, dass es nicht richtig generiert wird, was meinen Sie genau? nicht die richtige Größe? gar nicht angezeigt?
– dano
6. November 2014 um 16:08 Uhr
Das hat am Ende für mich funktioniert:
function createnewproduct($product)
{
$new_post = array(
'post_title' => $product['Product'],
'post_content' => $product['Long_description'],
'post_status' => 'publish',
'post_type' => 'product'
);
$skuu = $product['SKU'];
$post_id = wp_insert_post($new_post);
update_post_meta($post_id, '_sku', $skuu );
update_post_meta( $post_id, '_regular_price', $product['ourPrice'] );
update_post_meta( $post_id, '_manage_stock', true );
update_post_meta( $post_id, '_stock', $product['Qty'] );
update_post_meta( $post_id, '_weight', $product['Weight'] );
if (((int)$product['Qty']) > 0) {
update_post_meta( $post_id, '_stock_status', 'instock');
}
$dir = dirname(__FILE__);
$imageFolder = $dir.'/../import/';
$imageFile = $product['ID'].'.jpg';
$imageFull = $imageFolder.$imageFile;
// only need these if performing outside of admin environment
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
// example image
$image="http://localhost/wordpress/wp-content/import/".$product['ID'].'.jpg';
// magic sideload image returns an HTML image, not an ID
$media = media_sideload_image($image, $post_id);
// therefore we must find it so we can set it as featured ID
if(!empty($media) && !is_wp_error($media)){
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'any',
'post_parent' => $post_id
);
// reference new image to set as featured
$attachments = get_posts($args);
if(isset($attachments) && is_array($attachments)){
foreach($attachments as $attachment){
// grab source of full size images (so no 300x150 nonsense in path)
$image = wp_get_attachment_image_src($attachment->ID, 'full');
// determine if in the $media image we created, the string of the URL exists
if(strpos($media, $image[0]) !== false){
// if so, we found our image. set it as thumbnail
set_post_thumbnail($post_id, $attachment->ID);
// only want one image
break;
}
}
}
}
}
Wenn Sie ein Bild von der Seite laden, durchläuft es meines Erachtens nicht den normalen Prozess zum Erstellen aller Zwischenminiaturansichten. Das image_make_intermediate_size() Funktion könnte hilfreich sein.
– Helgathewikinger
4. November 2014 um 8:27 Uhr
Alte Frage, die ich kenne, aber diese tauchte bei meiner Suche nach der Antwort bei Google auf, und es gibt eine bessere Möglichkeit, die Miniaturansichten sowie alle anderen benötigten Bildgrößen zu generieren: wp_generate_attachment_meta. Wird in zwei Zeilen verwendet:
Wenn Sie sagen, dass es nicht richtig generiert wird, was meinen Sie genau? nicht die richtige Größe? gar nicht angezeigt?
– dano
6. November 2014 um 16:08 Uhr