Ürünleri XLSX'ten WooCommerce'e Nasıl Aktarırım
Önemli Not: Bu makalenin amacı doğrultusunda, WooCommerce'e içe aktarmak için Yahoo Miva Merchant platformundan dışa aktarma dosyalarını kullandım, ancak uygulamalar herhangi bir xlsx tabanlı dışa/içe aktarma için kullanılabilir.
Önemli Not 2: Lütfen sahte bir sitede içe aktarmayı test edin ve canlı olarak yapmadan önce bir yedek alın, çünkü özellikle binlerce ürünü içe aktarıyorsanız, geri dönüşü zor.
WordPress dünyayı kasıp kavuruyor, şimdi web'in %25'ine güç sağlıyor. Bu güçlü yükselişin arkasında harika bir e-ticaret çözümü ortaya çıktı… WordPress eklentisi WooCommerce artık her seferinde bir çevrimiçi mağazada dünyayı kasıp kavuruyor. WooCommerce, çok iyi yazılmış ve kullanımı çok kolay harika bir eklentidir, ancak onu gerçekten farklı kılan genişletilebilirliğidir.
Woocommerce'in WP-E-ticaret'ten nasıl türetildiği konusuna girmeyeceğim (ya da ben… herhangi bir sayıda yolla.
Geliştiricileri Woothemes, bunun için yüzlerce eklenti oluşturdu, dünyanın dört bir yanındaki taşıyıcılardan nakliye yöntemleri, Stripe'den Alipay'e (Çin) ve dünyanın dört bir yanından ödeme yöntemleri ve ağırlıkla fiyat hesaplamasına izin vermekten ve gösteriş yapmaktan çok daha fazlasını yapıyor. duvar kağıdı mağazaları gibi şeyler için seçici moda renk örnekleri ve bir sürü başka şey. Buna ek olarak, başkaları tarafından ücretsiz veya ücretli olarak çevrimiçi olarak sunulan yüzlerce (binlerce değilse de) başka uzantı vardır ve başka biri henüz oluşturmadıysa, bunu kendiniz yapabilir veya yapması için birini kiralayabilirsiniz. Bu, WooCommerce'in gezegendeki bir numaralı e-ticaret çözümü haline gelmesinin ana nedenlerinden biridir.
Bu nedenle, elbette, çevrimiçi mağazalar işleten birçok kişi, WP tarafına geçmeye ve sitelerini henüz orada değilse WordPress'e taşımaya ve mağazalarını WooCommerce'de kurmaya heveslidir. Çoğu için bu çok zor değil. Woothemes'in zaten Woothemes'ten aldığı WooCommerce CSV (virgülle ayrılmış değerler) içe aktarma paketi uzantısı var ve bu uzantı, mağazanızın dışa aktarma csv dosyasından CSV veri alanlarını, Mağazanızdan Item_Number'ı Woo'daki SKU'ya kaydetme gibi WooCommerce alan eşdeğerlerine eşlemenize olanak tanır. Vay canına.
Ancak diğerleri için bu, şu veya bu nedenle mümkün değildir. Böyle bir durum, Yahoo Miva platformundan taşınmaya çalışanlardır ve bunun nedeni iki yönlüdür: A dışa aktarma dosyası, csv gibi ayrıştırılamayan bir xlsx dosyasıdır ve B: çünkü kategorileri için kategori kodları kullanırlar, oysa WordPress'te kategori kimlikleri ve sümüklü böceklerdir. Sonuç olarak, dışa aktarmaları iki xlsx dosyasına bölünür, biri ürünler için yalnızca kategori kodlarına referanslar içerir ve ardından size ilgili kategori adını vb. veren kategori kodlarının başka bir dosyası.
Şirket içi geliştirici olarak rolümün bir kısmı, müteahhitlere ihtiyaç duyduklarında yardımcı olmaktır. Geçen hafta müteahhitlerimizden biri bir işte geride kalıyordu çünkü Woothemes ithalat uzantısını müşterisinin Miva mağazasından onlar için inşa ettiği parlak yeni WooCommerce mağazasına ürün ithal etmek için kullanamayacağını fark etti ve yukarıdakiler yüzünden. site derlemesini tamamlarken aynı zamanda özel ithalatçıyı oluşturmaya vakti yoktu.
Bu yüzden onun için WooCommerce'e ithal edilen bu ürünleri almaya geldim. Uzun zamandır WP All Import eklentisini kullanmak için can atıyordum, ancak burada yeni bir şey öğrenmek için zamanım olmadı, bu yüzden bildiklerimi kullandım ve özellikle 2'yi ayrıştırmak için oluşturulmuş özel bir CSV ayrıştırma eklentisi oluşturdum. csv'ler ve onlardan ürün ve kategorileri WordPress'e aktarın. Bir sonraki makalemde aynı içe aktarmayı yapacağım, ancak WP All Import eklentisini ve içe aktarma sırasında kullanmak üzere özel php işlevlerini gömmenize izin verme özelliğini kullanacağım.
Dosyaları Alma (yükleyici veya…)
Lütfen e-tabloları Google Drive'da veya OneDrive'da veya başka bir bulut çözümünde veya kendi sunucunuzda barındırabileceğinizi ve isterseniz url'leri kullanmak için php dosyalarını düzenleyebileceğinizi unutmayın, ancak WordPress yükleyiciyi nasıl kodlayacağımı biliyorum. aldığım yaklaşım. Bu eğitimin gerçekten bir parçası değil, bu yüzden WordPress yükleyicisini nasıl ekleyebileceğinizi öğrenmek istiyorsanız, bunu şu şekilde yaptım: http://webomnizz.com/how-to-use-wordpress-uploader-into -temanız/
Yükleyicinin devam etmesi için bir sayfaya ihtiyacınız olacak ve bunu şu şekilde ekleyebilirsiniz:
//hook into the admin_menu hook with the function adding the page add_action('admin_menu',array($this,'setup_page'));
Şimdi sayfayı eklemek için – parametreleri her satıra bir tane koyacağım ve size her birinin ne yaptığını söyleyeceğim
function setup_page() { add_submenu_page( 'edit.php?post_type=product',//this will add it under the Products link 'CSV Parse',//Title of link in menu 'CSV Parser',//Title of page 'manage_woocommerce',//The permission level needed to view the page 'parse_csv',//The slug (page=slug) in url array($this, 'uploader_page') //The function run when the page is viewed ); }
uploader_page işlevinde, yukarıda bağlantısı verilen eğitimdeki formu koyacaksınız. Bu fonksiyonda, yanlarında yükleyici düğmeleri olan 2 ayrı giriş alanı ekledim, biri ürün elektronik tablosu için ve diğeri kategoriler için etiketlendi, kullanıcı yükleyiciyi kullanarak dosyayı seçtiğinde veya yüklediğinde, dosyanın url'sini giriş alanına ekledi. Daha sonra dosya url'lerini göndermek için bir gönder düğmesi vardı.
Verileri İşleyin
VE şimdi nihayet bu dosyaları ayrıştıracağız…
Bir form gönderirken admin_init kancasına şu şekilde bağlanabiliriz:
add_action('admin_init',array($this,'parse_xlsx_files'));
Ve işlevi aşağıdaki gibidir:
function parse_xlsx_files() { /*Check if our form was submitted *submit_ccsvp_csvs is the name=”” attribute of the submit button on the files form */ if (isset($_POST['submit_ccsvp_csvs'])) { $this->extract_data(); $this->build_categories(); $this->map_data(); $this->import_products($products); } }
Adım 1: XLSX'ten Verileri Çıkarın
Görüyorsunuz ki, basitlik için onu diğer 4 fonksiyona böldüm, bu yüzden şimdi bunları tek tek ele alacağım.
Veri ayıklama işlevi çok basittir:
function extract_data() { /* When you upload xlsx files in WP you only get the filename in your text field, so given that * and the fact that some server configs don't allow PHP to access the data from a url I opted * to use the path so first we get the path */ $uploads = wp_upload_dir(); $path = $uploads['path']; //Then we use the path with the post variables (the filenames) sent through from our form $this->products = $this->parse_xlsx($path . "/" . $_POST['products_csv'] . ".xlsx"); $this->catsandsubcats = $this->parse_xlsx($path . "/" . $_POST['catsandsubcats_csv'] . ".xlsx"); }
parse_xlsx işlevinin kullanımına dikkat edin. Bu işlev https://Gist.github.com/searbe/3284011 adresinden gelir – xlsx dosyasını alır (bir MS uygulama formatıdır) verileri çıkarır ve sütun başlıkları tarafından anahtarlanan bir diziye koyar. Sonunda biraz değiştirdim:
Satırı oluşturduğu yerde (satır 57 ve 58) satırları şöyle bir diziye kaydettim:
$values = array_pad($arr, count($headers), ''); $row = array_combine($headers, $values); $data[] = $row;
Ardından, işlevin sonunda dosyayı silmeden önce veri dizisini döndürüyorum:
return $data; @unlink($dir); @unlink($inputFile);
2. Adım: Kategorileri Oluşturun
Artık güzel bir dizideki verilere sahip olduğumuza göre onu kullanabiliriz. Ana process_form işlevimizden bir sonraki işlev $this->build_categories() ve aşağıdaki gibidir:
function build_categories() {foreach ($this->catsandsubcats as $wp_key => $value) {$this->output[] = "Starting on term " . print_r($value, true);$this->output[] = "Starting on term " . print_r($value, true);//Don't try and insert categories with no text as then you get horrible number categoriesif (empty($value['parent_name']))continue;//Don't insert it if you already have//The insert function would prevent duplicates anyway but this saves processing timeif (!term_exists($value['parent_name'])) {//Insert the term using the values from the xlsxgirin//Insert the term using the values from the xlsx//starting with the parent terms only$term_id = wp_insert_term($value['parent_name'], 'product_cat', array('description' => $value['miva_category_parent_code']));$this->output[] = "Term " . $value['parent_name'] . " inserted with ID " . print_r($term_id, true);} else {$term = get_term_by('name', $value['parent_name'], 'product_cat');$term_id = $term->term_id;$this->output[] = "FOUND TERM WITH ID " . print_r($term_id, true);}//Build a new array mapping WP categories to Miva cat codes for use when parsing the products$this->cats[$value['miva_category_parent_code']] = $value['miva_category_parent_code'];//Now that we have the term_id for the parent use it to insert the child categories$child_id = wp_insert_term($value['sub_category_name__'], 'product_cat', array('description' => $value['miva_sub_category_code'], 'parent' => $term_id));//Again saving it to the array$this->cats[$value['miva_sub_category_code']] = $value['sub_category_name__'];$this->output[] = "Inserting child term " . $value['sub_category_name__'] . " with child id = " . print_r($child_id, true) . " AND parent = " . $term_id;}$this->output[] = "Categories Built";}
3. Adım: Veri Anahtarlarını Dışa Aktarmadan WooCommerce/WordPress'e Eşleyin
Artık tüm Miva kategorileriniz doğru hiyerarşilerinde WordPress'e kaydedilmiştir. Şimdi ürünleri içe aktaracağız, ancak önce dizi anahtarlarını (Miva xlsx'teki sütun başlıkları) WP karşılıklarıyla eşleştirmemiz gerekiyor. Çoğunlukla -> anahtarını bağlamanız yeterlidir, ancak meta_fields'ta WooCommerce için Miva dışa aktarımında olmayan bazı meta verilere ihtiyaç vardır, bu nedenle sadece enter_value::value kullanıp değeri gönderenler için. “::” değeri girebilmemiz için bize bunları tanımlamamız için bir şey verir. Ayrıca, anahtarı, çağırdığımız ve Miva'dan veri ilettiğimiz bir fonksiyonun adı olan func_field'lerimiz var.
function map_data() { $this->meta_fields = array( '_sku' => 'product_code', '_downloadable' => 'enter_value::no', '_virtual' => 'enter_value::no', '_visibility' => 'enter_value::visible', '_stock' => 'enter_value::999', '_stock_status' => 'enter_value::instock', '_backorders' => 'enter_value::no', '_manage_stock' => 'enter_value::yes', '_price' => 'price', '_regular_price' => 'price', '_wc_cog_cost' => 'cost', ); $this->post_fields = array( 'post_title' => 'product_name', 'post_excerpt' => 'description', 'post_content' => 'description', ); $this->func_fields = array( 'map_categories' => 'category_codes', 'save_images' => 'image_url', 'get_status' => 'active', ); }
Adım 4: Ürünleri İçe Aktarın
Şimdi nihayet import_products işlevine ulaşıyoruz:
function import_products() { foreach ($this->products as $header => $value) { //First we build the post data array for insertion $post_data['post_type'] = "product"; //There was no function calls in the post data fields so it is simple... foreach ($this->post_fields as $wp_key => $miva_key) { $post_data[$wp_key] = $value[$miva_key]; } //So we check if the product exists first and if it does we grab the id $post_id = $this->product_exists($value['product_code']); //If it doesn't we insert it and if it does we are going to update it if ($post_id === false) { $post_id = wp_insert_post($post_data); $this->output[] = "Post created " . print_r($post_id, true); } else { $this->output[] = "Updating post $post_id"; } //The meta_fields has only the enter_value function so we... foreach ($this->meta_fields as $wp_key => $miva_key) { //check for the “::” string we mentioned earlier if (strstr($miva_key, "::")) { //if found split it at the “::” $parts = explode("::", $miva_key); //$parts is now array(0 => 'enter_value',1 => $value); //then save update_post_meta($post_id, $wp_key, $parts[1]); } else { //if no “::” then it is just a straight grab of the data from the products array using the miva_key update_post_meta($post_id, $wp_key, $value[$miva_key]); } } wp_set_object_terms($post_id, 'simple', 'product_type', false); foreach ($this->func_fields as $wp_key => $miva_key) { //site_url() is a wp function giving the url of your site, if you are importing to a new domain //then you would insert the previous url (the url of the miva store) //as the xlsx file only contains the path. if ($miva_key == "image_url") $value[$miva_key] = trailingslashit(site_url() . basename($value[$miva_key]); //then we call the function and pass in the post_id and the value from miva $this->{$wp_key}($post_id, $value[$miva_key]); } } } }
Yani harita veri fonksiyonundan yukarıda kullanılan aşağıdaki fonksiyonlara sahibiz.
-
'map_categories' => 'category_codes' - Bu, ürün verilerinden kategori kodunu kullanarak ve daha önce kaydettiğimiz dizide bularak WP kategorisini alır ve ardından gönderiyi (ürün) o kategoriye kaydeder.
function map_categories($post_id, $codes) { $set_terms = array(); foreach (explode(",", $codes) as $code) { if (!isset($this->cats[$code])) { $this->output[] = "Cat $code not found"; } else { $set_terms[] = $this->cats[$code]; } } $this->output[] = "Ayar " . print_r($set_terms, doğru) . ” $post_id'ye”; if (!empty($set_terms)) wp_set_object_terms($post_id, $set_terms, 'product_cat', false); }
-
'save_images' => 'image_url' - Bu, iletilen resim url'sini alır ve onu tam teşekküllü bir gönderi ekine kaydeder. Ürün başına sadece 1 görsel olduğu için onu da öne çıkan görsel yapıyoruz.
function save_images($post_id, $url) { $tmp = download_url($url); $file_array = array( 'name' => basename($url), 'tmp_name' => $tmp ); $this->output[] = "Starting on image $url " . print_r($file_array, true); // Check for download errors if (is_wp_error($tmp)) { @unlink($file_array['tmp_name']); return $tmp; } $id = media_handle_sideload($file_array, $post_id); $this->output[] = "Sideload handled: " . print_r($id, true); // Check for handle sideload errors. if (is_wp_error($id)) { @unlink($file_array['tmp_name']); return $id; } update_post_meta($post_id, '_thumbnail_id', $id); $this->output[] = "$image_url save to $post_id with image_id $id"; } - Ve son olarak…
'get_status' => 'active' - Bu, aktif sütunun değerini Miva'dan alır ve WordPress post_status'u şu şekilde ayarlamak için kullanır:
function get_status($post_id, $active) { $post_status = $active == 1 ? "publish" : "draft"; if ($post_status != get_post_status($post_id)) { wp_update_post(array('ID' => $post_id, 'post_status' => $post_status)); } }
Sonunda, bir miktar çıktı almayı seçebilirsiniz, böylece bunların hepsinin işe yaradığını bilirsiniz. Parse_xlsx_files'inizi yapmanız için yukarıdaki kodda bir dizi çıktı oluşturdum:
function parse_xlsx_files() { if (isset($_POST['submit_ccsvp_csvs'])) { $this->extract_data(); $this->build_categories(); $this->map_data(); $this->import_products(); echo implode("<p/>",$this->output); } }
İşte bu kadar. Artık yalnızca bir xlsx dosyasını ayrıştırmakla kalmaz, aynı zamanda xlsx dosyalarından WooCommerce'e ve birden çok dosyadan ürünleri içe aktarabilirsiniz. Umarım bu öğreticiyi/makaleyi beğenmişsinizdir, lütfen paylaşın, böylece daha fazla böyle yazmamı istediğinizi biliyorum.
Not: Bunun dışında oluşturulan eklentiyi bir Github deposuna ekledim, böylece tüm kodu tek bir yerde görebilirsiniz. Gerçek kullanım durumunda, yüklenici zaten görüntüleri eski siteden manuel olarak indirmiş ve WP'ye yüklemişti, bu yüzden içe aktarma sırasında oradan bir yan yükleme yapmak zorunda kaldım, ancak bu kullanım durumunu taahhüt 1 olarak koydum ve sonra değiştirdim url'den daha yaygın olarak gerekli resimleri indirmek için, böylece bunu yapmak için gereken değişiklikleri herhangi bir şekilde görebilirsiniz. Umarım beğenirsin:
ev borcu WordPress sitesi