web-dev-qa-db-ja.com

WooCommerce csvインポートカスタムフィールド-組み込みインポーターを調整してカスタムフィールドを含めますか?

私はこの状況で、2000を超える製品のカスタムフィールドの値をインポートする必要があり、これを可能にする無料のプラグインまたは組み込み関数を見つけることができません。現在、私はこの機能を備えたさまざまなプレミアムプラグインを見つけましたが、最も安いプラグインは50ドルで、現時点では予算外です。

したがって、組み込みのcsvインポーターとエクスポーターにカスタムフィールドを追加する方法を知っている人がいるかどうか尋ねたいのですが、3.1より後のバージョンのWoocommerceに付属していますか?これまでのところ、製品データ用に独自のカスタムフィールドを正常に作成しましたが、組み込みインポーターに自動的に表示されません(残念ながら)。

これを行うための実行可能な方法はありますか、それとも、私が見つけていない無料のプラグインなど、他の方法を知っていますか?

この投稿 に従って「wp ultimate csv importer」を試してみましたが、残念ながらカスタムフィールドはこの無料プラグインに表示されません。

7
Chri.s

さて、私は答えを見つけたので、私はこの質問を投稿するのが少し速すぎたようです-しかしうまくいけば、これは一部の人々に多くの時間とお金を節約することができます(私がこの回答は他の場所でしか見つかりませんでした)。

私は誤ってWoocommerceドキュメントセクションの「 列ヘッダー参照 」(最初からそこにいたはずですが)にぶつかりましたが、実際にこれを調整するだけで、完全に実行可能であることがわかりましたmeta:のプレフィックスとそれに続くカスタムフィールドのidを含むcsvファイルのヘッダー参照。

このソリューションの要件
このソリューションのonly要件は、Woocommerceバージョン> 3.1がインストールおよびアクティブ化されており、組み込みのcsvインポーターを使用することですプラグインの。これは、「ツール->インポート-> Woocommerce製品(csv)」の下の管理パネルにあります。


たとえば、各製品のブランドを含み、IDがbrandの各製品のカスタムフィールドがある場合、これらの各カスタムフィールドの値を、次のcsvファイルのヘッダー参照:meta:brand

別の例として、カスタムフィールドのIDが_product_brandの場合、このカスタムフィールドの値は、ヘッダー参照(たとえば、Excelのcsvファイルの最初の行)に次の名前を付けることでインポートできます。meta:_product_brand

解決策は、見出しのcsvファイル内のカスタムフィールドidmeta:をプレフィックスすることです。

注:インポートの2番目のステップで自動的に行われない場合は、カスタムフィールドにインポートする列の[フィールドにマップ]列で[メタとしてインポート]オプションを選択してください。

新しいカスタムフィールドを作成します
存在しないフィールドIDのメタ見出し参照を含むcsvをアップロードするだけの場合、csvファイルで指定された名前の新しいカスタムフィールドが作成されます。

18
Chri.s

私は同じニーズを持っていて、最終的にこの目的のために自分のプラグインを開発しました。

まず、プラグインで 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メタデータです。

    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', "" );
1
Majid Abbasi