/
var
/
www
/
baudefruta
/
import
/
Upload File
HOME
<?php require __DIR__ . '/../wp-load.php'; $products = csvToArray('products.csv', ';'); $pictureNames = scandir(__DIR__ . '/images/'); $categories = []; // first pass to get the categories in their own hierachies foreach($products as $key => $product){ if( !empty($product['Categoria']) && !in_array($product['Categoria'], $categories) ){ $categories[] = $product['Categoria']; } } // name => 'term_id' $categoryTerms = []; foreach($categories as $categoriesLine){ $categoriesLine = explode('/', $categoriesLine); $parent = 0; foreach($categoriesLine as $categoryName){ $parent = term_exists( $categoryName, 'product_cat' ); if(!$parent){ $parent = wp_insert_term( $categoryName, 'product_cat', array( 'description' => '', 'slug' => sanitize_title($categoryName), 'parent' => $parent, ) ); } $parent = (array)$parent; $categoryTerms[ $categoryName ] = $parent['term_id']; } } foreach($products as $key => $product){ if( !empty($product['Descrição Dados nutricionais']) ){ $nutri = $product['Descrição Dados nutricionais']; $product['Descrição Dados nutricionais'] = ''; $replace = [ 'Declaração Nutricional por 100g:' => '', ' - dos quais,' => ';dos quais;' ]; $nutri = str_replace(array_keys($replace), array_values($replace), $nutri); $nutri = explode(';', $nutri); $product['Descrição Dados nutricionais'] = '<p>Declaração Nutricional por 100g:</p><ul>'; foreach($nutri as $line){ $line = trim($line); if( $line == 'dos quais' ) $product['Descrição Dados nutricionais'] .= '<li style="list-style: none !important;">dos quais</li>'; else $product['Descrição Dados nutricionais'] .= '<li>'.$line.';</li>'; } // $product['Descrição Dados nutricionais'] = trim($product['Descrição Dados nutricionais'], ';</li>' ) . '.</li>'; $product['Descrição Dados nutricionais'] .= '</ul>'; } // construct post_content // csv column => website title text $postContentMapping = [ 'Descrição' => 'Descrição', 'Descrição Dados nutricionais' => 'Dados nutricionais', 'Descrição Modo Utilização' => 'Modo Utilização', 'Peso' => 'Peso' ]; $postContent = ''; foreach($postContentMapping as $key => $title){ if(empty($product[$key])) continue; $postContent .= '<section class="description_section"> <h4>' . $title . '</h4>'. '<div>'. $product[$key] . '</div> </section>'; } $post = [ 'post_type' => 'product', 'post_title' => $product['Nome do Produto'], 'post_excerpt' => $product['Excerto'], 'post_content' => $postContent, 'post_status' => 'publish', ]; $sku = $product['Sku / Referencia']; $product_id = wc_get_product_by_sku($sku); if($product_id == -1){ $product_id = $post_id = wp_insert_post($post); update_post_meta( $product_id, '_sku', $sku ); echo '<br>Insert: ' . $product_id . ' ' . $sku; }else{ $post['ID'] = $product_id; wp_update_post($post); echo '<br>Update: ' . $product_id . ' ' . $sku; } // STOCK $stock = !empty($product['Stock']) ? $product['Stock'] : ''; update_post_meta( $product_id, '_stock', $stock ); update_post_meta( $product_id, '_manage_stock', "yes" ); // PRICE if( !empty($product['Preço']) ){ $price = $product['Preço']; $replace = [ ',' => '.', '€' => '' ]; $price = str_replace(array_keys($replace), array_values($replace), $price); $price = trim($price); }else{ $price = ''; } update_post_meta( $product_id, '_price', $price ); update_post_meta( $product_id, '_regular_price', $price ); // WEIGHT if( !empty($product['Peso']) && stripos($product['Peso'], 'uni') === false ){ $weight = $product['Peso']; $liquidWeight = stripos($weight, 'Peso líquido') !== false; $replace = [ ',' => '.', '€' => '', 'g' => '', 'kg' => '', 'ml' => '', '+/-' => '', 'Peso líquido:' => '' ]; $weight = str_replace(array_keys($replace), array_values($replace), $weight); $weight = trim($weight); if($liquidWeight){ $weight = (float)$weight; $weight /= 1000; } }else{ $weight = ''; } update_post_meta( $product_id, '_weight', $weight ); // FEATURED IMAGE $featuredImage = get_the_post_thumbnail((int)$product_id); if( !strlen($featuredImage) ){ echo '<br><b>insert or assign image</b>'; foreach($pictureNames as $key => $filename){ if(strpos($filename, $sku) !== false){ unset($pictureNames[$key]); // for performance, why not $attachment_id = get_attachment_by_post_title($filename); if($attachment_id == -1){ echo '<br>insert image'; $file = __DIR__ . '/images/' . $filename; generateImage($file, $product_id, true); }else{ echo '<br>assign existing attachment to product '; set_post_thumbnail($product_id, $attachment_id); } } } } // CATEGORIES if( !empty($product['Categoria']) ){ $categories = explode('/', $product['Categoria']); $categoriesAux = []; foreach($categories as $category){ $categoriesAux[] = $categoryTerms[ $category ]; } print_r2($categoriesAux); // $set = wp_set_post_terms($product_id, ['frescos', 'frutas'], 'product_cat'); // $set = wp_set_post_terms($product_id, $categories, 'product_cat'); $set = wp_set_post_terms($product_id, $categoriesAux, 'product_cat'); // echo '<br>'; var_dump($set); } // import category wp_set_post_terms($product_id, 40, 'product_cat', true); } // functions function csvToArray($file, $delimiter, $assoc = true) { if (($handle = fopen($file, 'r')) !== FALSE) { $i = 0; $arr = []; while (($lineArray = fgetcsv($handle, 0, $delimiter, '"')) !== FALSE) { for ($j = 0; $j < count($lineArray); $j++) { if($assoc){ if( $i === 0 ){ $header[] = $lineArray[$j]; }else{ $arr[$i][ $header[$j] ] = $lineArray[$j]; } }else{ $arr[$i][$j] = $lineArray[$j]; } } $i++; } fclose($handle); }else{ echo 'fopen failed.'; } return $arr; } function wc_get_product_by_sku($sku) { global $wpdb; if( defined( 'ICL_LANGUAGE_CODE' ) ){ $product_id = $wpdb->get_var($wpdb->prepare("SELECT pm.post_id FROM ".$wpdb->postmeta." AS pm LEFT JOIN ".$wpdb->prefix."icl_translations AS tr ON pm.post_id = tr.element_id WHERE pm.meta_key='_sku' AND pm.meta_value='%s' AND tr.language_code = '".ICL_LANGUAGE_CODE."'", $sku)); } else { $product_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $sku)); } // echo $product_id. "<br>"; if($product_id){ return $product_id; } return -1; } function generateImage($image_url, $post_id, $featured = false){ $upload_dir = wp_upload_dir(); $toappend = ""; $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' => $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); if($featured) $res2= set_post_thumbnail($post_id, $attach_id); return $attach_id; } function get_attachment_by_post_title($title) { global $wpdb; $post_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_title = '%s' LIMIT 1", $title)); if($post_id){ return $post_id; } return -1; } // debug function print_r2($arr){ echo '<pre>'; print_r($arr); echo '</pre>'; }