WooCommerce csv导入自定义字段 - 调整内置导入器以包含自定义字段?

时间:2017-10-31 17:52:22

标签: php wordpress csv import woocommerce

我遇到这种情况,我必须为超过2000种产品的自定义字段导入值,而我根本找不到任何可以启用此功能的免费插件或内置函数。目前我发现了一系列具有此功能的高级插件,但最便宜的插件价格为50美元,而且目前仅仅超出预算。

因此,我想问一下,这里是否有人知道如何向内置csv导入器添加自定义字段&出口商哪个版本的Woocommerce比3.1更高版本?到目前为止,我已成功为产品数据创建了自己的自定义字段,但它们并不会自动显示在内置导入程序中(遗憾的是)。

有没有可行的方法来做到这一点,或者就此而言,您是否知道其他任何方式,例如我找不到的免费插件或其他任何方式?

请注意,我已根据this post尝试了“wp ultimate csv importer”,但不幸的是,自定义字段未显示在此免费插件中。

2 个答案:

答案 0 :(得分:10)

好吧,我似乎有点过于快速发布这个问题,因为我刚刚找到答案 - 但希望这可以为一些人节省大量的时间和金钱(会给我带来很多好处)时间,如果我只在其他地方找到这个答案)。

我偶然碰到了" Column Header Reference" (虽然显然我应该从一开始就在那里)Woocommerce文档部分,在这里我实际上发现这是完全可行的,只需通过调整csv文件中的头文件参考,前缀为meta:,在您的自定义字段的id旁边。

此解决方案的要求
此解决方案的唯一要求是您安装并激活了Woocommerce版本> 3.1,并使用插件的内置csv导入程序。这可以在"工具 - >下的管理面板中找到。导入 - > Woocommerce产品(csv)"

示例
如果您有每个产品的自定义字段,例如,其中包含每个产品的品牌且ID为brand,则可以导入通过在csv文件中命名以下引号参考来定义每个自定义字段的值:meta:brand

作为另一个示例,如果自定义字段的ID为_product_brand,则可以通过命名Header Reference(例如,excel中csv文件中的第1行)来导入此自定义字段的值。 folliwing:meta:_product_brand

解决方案是在标题中的csv文件中为自定义字段id添加前缀meta:

注意: 如果在导入的第二步中它没有自动发生,请确保选择" import as meta"在列"映射到字段"对于要导入自定义字段的列。

创建新的自定义字段
如果您只是上传带有不存在的字段ID的元标题引用的csv,这将创建一个新的自定义字段,其名称在csv文件中给出。

答案 1 :(得分:0)

我有同样的需要,最后为此目的开发了自己的插件。

首先,您需要在插件中使用PHPExcel。之后,阅读您的xls文件并使用woocommerce函数导入产品。

使用以下结构读取xls文件并将其转换为PHP数组:

function fileInitializer($file, $needCells){
     $array_data = array();
     require_once 'libraries/PHPExcel/PHPExcel.php';
     $objPHPExcel = new PHPExcel();
     $target_dir = untrailingslashit( dirname( __FILE__ ) )."/upload-file/".$file;
     $objReader= new PHPExcel_Reader_Excel5();
     $objReader->setReadDataOnly(true);
     $objPHPExcel = $objReader->load( $target_dir);
     $rowIterator = $objPHPExcel->getActiveSheet()->getRowIterator();
     $rowIndex = 0;
     foreach($rowIterator as $row){
         $cellIterator = $row->getCellIterator();
         $cellIterator->setIterateOnlyExistingCells(false); 
         if(1 == $row->getRowIndex ()) continue;

        foreach ($cellIterator as $cell) {
            foreach($needCells as $needCell){
                if($needCell['cell_name'] == $cell->getColumn()){
                    $array_data[$rowIndex][$needCell['array_name']] = fai_convert_string_to_persian($cell->getCalculatedValue());
                } 
            }
        }
        $rowIndex++;
    }
    return $array_data;
}
$file = 'FILEPATH';
$needCells = array(
     array('cell_name'=>'A', 'array_name'=>'id')
    , array('cell_name'=>'B', 'array_name'=>'full_name')
);
$array_data = fileInitializer($file, $needCells);

并且经过上面的过程在$ array_data中有一段时间并添加如下产品:

$post = array(
        'post_author' => $user_id,
        'post_content' => '',
        'post_status' => "publish",
        'post_title' => $value['product_name'],
        'post_parent' => '',
        'post_type' => "product",
    );

    $post_id = wp_insert_post( $post, $wp_error );

    //ADDING EXTERA FEATURES
    update_post_meta( $post_id, 'main_code_text_field', $value['main_code'] 
 );

这些也是woocommerce metadatas:

    update_post_meta( $post_id, 'total_sales', '0');
    update_post_meta( $post_id, '_downloadable', 'yes');
    update_post_meta( $post_id, '_virtual', 'yes');
    update_post_meta( $post_id, '_regular_price', "" );
    update_post_meta( $post_id, '_sale_price', "");
    update_post_meta( $post_id, '_purchase_note', "" );
    update_post_meta( $post_id, '_featured', "no" );
    update_post_meta( $post_id, '_weight', "" );
    update_post_meta( $post_id, '_length', "" );
    update_post_meta( $post_id, '_width', "" );
    update_post_meta( $post_id, '_height', "" );
    update_post_meta( $post_id, '_sku', "");
    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, '_sold_individually', "" );
    update_post_meta( $post_id, '_manage_stock', "no" );
    update_post_meta( $post_id, '_backorders', "no" );
    update_post_meta( $post_id, '_stock', "" );