サポート » プラグイン » WooCommerceで自動送信時にCSVファイルを保存したい

  • 現状在庫を関係なしに商品を販売しております。
    なのでステータスは常にcompletedにしています。
    add_action(‘woocommerce_thankyou’, ‘custom_woocommerce_auto_complete_order’);
    function custom_woocommerce_auto_complete_order($order_id)
    {
    if (!$order_id) {
    return;
    }

    $order = wc_get_order($order_id);
    $order->update_status(‘completed’);
    }

    それで、本題なのですが自動送信時(お客様とショップへの完了メール時)に子テーマのあるフォルダに
    csvを保存したいと思っております。

    $file = ‘wp-content/themes/child/log.txt’;
    $item = “aaa,bbb,ccc,ddd,eee,\n”;
    file_put_contents($file, $item, FILE_APPEND | LOCK_EX);

    ここまでは、なんとかできたのですが、これを、どこに書くのかが解らないことと
    販売した商品の内容(メールでは詳細が記入されている)を、csvに保存したいのです。

    どなたか、どうぞ、ご教授よろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは

    メール送信後に実行される、woocommerce_email_sentアクションフックを使ってはどうでしょうか。
    このアクションフックの定義は以下のようになっています。

    do_action( 'woocommerce_email_sent', $return, $this->id, $this );

    第二引数がメールのIDなのですが、完了時のメールのIDはcustomer_completed_orderなので、これで判断できると思います。

    また、商品の内容は注文データが取得できればそこから取得可能と思います。
    注文データはWC_Orderクラスのオブジェクトが$this->objectに入れられています。
    WC_Order::get_itemsというメソッドで注文の中にあるアイテムが取得できます。

    私は実際にはこの方法でプログラムを書いたことがないので、上記の方法で必ずできるとは断言できません。
    また、アイテムがどのような形式で取得できるのかも明記できません。

    いろいろ試行錯誤されてみてはどうでしょうか。

    トピック投稿者 word45press

    (@word45press)

    こんにちわ。
    返信遅くなり申し訳ございません。
    メール送信時と最初は思っていたのですが、チェックアウト時で考えてました。
    おそらく、一緒かなと・・・。
    function action_woocommerce_checkout_process()
    {
    $file = ‘wp-content/themes/lightning_child/log.txt’;
    // 新しいデータをファイルに追加します
    $person = “1234\n”;
    // FILE_APPEND フラグはファイルの最後に追記することを表し、
    // LOCK_EX フラグは他の人が同時にファイルに書き込めないことを表します。
    file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
    }
    add_action(‘woocommerce_checkout_process’, ‘action_woocommerce_checkout_process’, 10, 0);

    これで、買い物した時に、csvに保存は出来ました。
    さて、問題はここからです。
    注文データの出力がさっぱりわかりません。
    なにぶん、wordpress、php初心者なものでして・・・。

    じっくり考えてみます・・・。
    また、ヒント等、ご教授頂ければ幸いでございます。
    よろしくお願いいたします。

    action_woocommerce_checkout_processアクションフックの時点では、まだオーダーではなくカートが存在する状態のようです。

    $cart = WC()->cart;WC_Cartクラスのオブジェクトを取得できます。
    $cart->get_cart_contents();とすると、カート内のアイテムの array を取得することができます。
    WooCommerce内では、

    foreach ( $this->get_cart_contents() as $cart_item_key => $values ) {
    	// do something
    }

    といった書かれ方をしていますね。

    この $values がどのような形式になっているのか、私は詳しく知らないのですが、$values['data']WC_Productクラスのオブジェクトになっているようです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「WooCommerceで自動送信時にCSVファイルを保存したい」には新たに返信することはできません。