2016-04-29 10 views
0

Ich versuche, Produktbild über PHP zu ändern. Aber ich kann es nicht zur Arbeit bringen.Woocommerce ändern Produktbild über PHP

require_once(ABSPATH . 'wp-admin/includes/media.php'); 
    require_once(ABSPATH . 'wp-admin/includes/file.php'); 
    require_once(ABSPATH . 'wp-admin/includes/image.php'); 
    $yesterday = date("Y-m-d", time() - 60 * 60 * 24); 
    $jsondata = file_get_contents("730.json"); 

    ini_set('memory_limit', '-1'); 
    $json = json_decode($jsondata, true); 
    $price = $json["AWP | Asiimov (Well-Worn)"][$yesterday]["price"]/100; 

    $post_information = array(
     'post_author' => $user_id, 
     'post_content' => '', 
     'post_status' => "publish", 
     'post_title' => 'test', 
     'post_parent' => '', 
     'post_type' => "product", 
    ); 

    $image = media_sideload_image("http://www.technologijos.lt/upload/image/n/technologijos/it/S-49657/samsung-ssd-840-evo.jpg", 0, "The WordPress Logo"); 

    $post_id = wp_insert_post($post_information); 

    $attachment = wp_get_attachment_image(18, 'thumbnail'); 

    update_post_meta($post_id, '_visibility', 'visible'); 
    update_post_meta($post_id, '_stock_status', 'instock'); 
    update_post_meta($post_id, 'total_sales', '0'); 
    update_post_meta($post_id, '_downloadable', 'no'); 
    update_post_meta($post_id, '_virtual', 'yes'); 
    update_post_meta($post_id, '_regular_price', $price); 
    update_post_meta($post_id, '_sale_price', "1"); 
    update_post_meta($post_id, '_purchase_note', ""); 
    update_post_meta($post_id, '_featured', "no"); 
    update_post_meta($post_id, '_sku', "145"); 
    update_post_meta($post_id, '_product_attributes', array()); 
    update_post_meta($post_id, '_sale_price_dates_from', ""); 
    update_post_meta($post_id, '_sale_price_dates_to', ""); 
    update_post_meta($post_id, '_price', $price); 
    update_post_meta($post_id, '_sold_individually', ""); 
    update_post_meta($post_id, '_manage_stock', "no"); 
    update_post_meta($post_id, '_backorders', "no"); 
    update_post_meta($post_id, '_stock', ""); 
    update_post_meta($post_id, '_product_image_gallery', $attachment ); 

Die letzte Zeile funktioniert nicht. Und ich weiß nicht, wie es funktioniert. Ich habe versucht, verschiedene Dinge zu ändern (ich bin neu in PHP/WordPress).

Antwort

1

Möchten Sie das vorgestellte Bild festlegen?

Wenn dies der Fall ist, können Sie die in der answer here angegebene Funktion verwenden.

Die Funktion:

function Generate_Featured_Image($image_url, $post_id ){ 
    $upload_dir = wp_upload_dir(); 
    $image_data = file_get_contents($image_url); 
    $filename = basename($image_url); 
    if(wp_mkdir_p($upload_dir['path']))  $file = $upload_dir['path'] . '/' . $filename; 
    else         $file = $upload_dir['basedir'] . '/' . $filename; 
    file_put_contents($file, $image_data); 

    $wp_filetype = wp_check_filetype($filename, null); 
    $attachment = array(
     'post_mime_type' => $wp_filetype['type'], 
     'post_title' => sanitize_file_name($filename), 
     'post_content' => '', 
     'post_status' => 'inherit' 
    ); 
    $attach_id = wp_insert_attachment($attachment, $file, $post_id); 
    require_once(ABSPATH . 'wp-admin/includes/image.php'); 
    $attach_data = wp_generate_attachment_metadata($attach_id, $file); 
    $res1= wp_update_attachment_metadata($attach_id, $attach_data); 
    $res2= set_post_thumbnail($post_id, $attach_id); 
} 

Verbrauch:

Generate_Featured_Image('../wp-content/my_image.jpg', $post_id); 
                 // $post_id is Numeric ID... You can also get the ID with:   wp_insert_post() 
+1

Danke. Es klappt – nobodyltu

0

Ich möchte Antwort auf bryceadams hinzuzufügen.

wie das scheint, zum Beispiel, gibt eBays Finding-API Bilder, deren URL eine Struktur hat, die den Befehl nicht zulassen

$filename = basename($image_url); 

da wie erwartet zu funktionieren, was passiert ist, werden alle URLs der Bilder haben Derselbe Endbasenname und die Dateien werden in Konflikt gesetzt. Ich fand heraus, dass der Befehl

$filename = basename($image_url, '.jpg') . (string) rand(0, 5000) . '.jpg'; 

besser für viele APIs funktioniert. Hoffe es summiert sich und hilft.

Verwandte Themen