質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WooCommerce

WooCommerceは、2011年にリリースされたWordPressのためのECプラグインです。ECサイトに必要な一連の機能を簡単に導入できる上、柔軟なカスタマイズをすることも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1471閲覧

Woocommerceで商品が売れた時に送信される「新規注文」メールを、管理者だけでなく商品記事の投稿者にも送信したい

bokupiroki

総合スコア54

WooCommerce

WooCommerceは、2011年にリリースされたWordPressのためのECプラグインです。ECサイトに必要な一連の機能を簡単に導入できる上、柔軟なカスタマイズをすることも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/02/29 18:36

編集2020/02/29 19:10

###実現したいこと・前提条件

  • WordPressのプラグイン「Woocommerce」を使ってデータを販売するサイトを作成中

  • 販売するデータを登録する運営側の人間が複数人いる

  • 商品が売れた時、データを登録した人自身にもそれがわかるようにしたい

  • 現状注文が入った時は、サイト管理者(admin)にのみメールが飛ぶ

  • そのメールが該当商品記事の投稿者(データの登録者)にも送信されるようにしたい

↓現状、商品が売れたら管理者に届く「新規注文(New order)」のメール
イメージ説明
↑これを投稿者にも送信したい

###試したこと
下記のコードを追記したところ、商品の「投稿者」のメールアドレス宛に「商品を購入した顧客向けのメール」が飛ぶようになりました。

php

1//functions.php 2add_filter( 'woocommerce_email_recipient_customer_completed_order', 'ajout_proprietaire_mail_commande_wc', 10, 2); 3 4function ajout_proprietaire_mail_commande_wc ($recipient, $order) { 5 6$order = new WC_Order($order->id); 7error_log(print_r('N° commande : ' . $order_id, true)); 8$items = $order->get_items(); 9foreach ( $items as $item ) { 10$product_id = $item['product_id']; 11error_log(print_r('ID Produit : ' . $product_id, true)); 12} 13$product_author_id=get_post_field('post_author', $product_id); 14$product_author = get_userdata( $product_author_id ); 15$productAuthorEmail = $product_author->user_email; 16$recipient = $recipient . ', ' . $productAuthorEmail; 17error_log(print_r('Auteur mail fonction 2 : ' . $productAuthorEmail, true)); 18error_log(print_r('Destinataire :' . $recipient, true)); 19return $recipient; 20}

https://toolset.com/forums/topic/add-product-author-email-in-the-order/
(末尾のコメントより引用)

↓このコードを書いたら、商品が売れた時に投稿者宛に飛んでくるようになったメール
イメージ説明

顧客向けに飛ぶ「完了の注文(completed order)」ではなく、管理者向けに飛ぶ「新規注文(new order)」のメールが投稿者に送信されるようにしたいです。

コードの2行目のフィルターフックが、送信されるメールの種類を表しているのではないかと予想しております。

woocommerce_email_recipient_customer_completed_order

ここを書き換えれば、現状の「completed_order」メールではなく、「New order」メールを投稿者宛に送信できるのではないかと思うのですが、
肝心のフック名が分かりません。

フックを探すときは、
https://docs.woocommerce.com/wc-apidocs/hook-docs.html
を参照するのですが、そもそも現状の「woocommerce_email_recipient_customer_completed_order
」自体もここには載っていません。

情報や調査方法ををご存じの方がいれば、教えていただきたいです。

###補足情報(FW/ツールのバージョンなど)
WordPress5.3.2
woocommerce3.8.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

php

1add_filter( 'woocommerce_email_recipient_new_order', 'ajout_proprietaire_mail_commande_wc', 10, 2); 2 3function ajout_proprietaire_mail_commande_wc ($recipient, $order) { 4 5$order = new WC_Order($order->id); 6error_log(print_r('N° commande : ' . $order_id, true)); 7$items = $order->get_items(); 8foreach ( $items as $item ) { 9$product_id = $item['product_id']; 10error_log(print_r('ID Produit : ' . $product_id, true)); 11} 12$product_author_id=get_post_field('post_author', $product_id); 13$product_author = get_userdata( $product_author_id ); 14$productAuthorEmail = $product_author->user_email; 15$recipient = $recipient . ', ' . $productAuthorEmail; 16error_log(print_r('Auteur mail fonction 2 : ' . $productAuthorEmail, true)); 17error_log(print_r('Destinataire :' . $recipient, true)); 18return $recipient; 19}

最初の「woocommerce_email_recipient_customer_completed_order」を「woocommerce_email_recipient_new_order」に書き換えたらいけました。

発見に至るまでに、このサイトを参考にしました。
https://www.mootpoint.org/blog/customising-woocommerce-notification-emails-hooks-filters/

The filter does exist – look here in the codex. Its name is dynamically generated with the email type, which is why it didn't show up for your grep.

These are the possible values:
woocommerce_email_recipient_new_order
woocommerce_email_recipient_customer_processing_order
woocommerce_email_recipient_customer_completed_order
woocommerce_email_recipient_customer_invoice
woocommerce_email_recipient_customer_note
woocommerce_email_recipient_low_stock
woocommerce_email_recipient_no_stock
woocommerce_email_recipient_backorder
woocommerce_email_recipient_customer_new_account
woocommerce_email_recipient_customer_invoice_paid
I think you need to use some logging to find the problem – it really helps to debug hooks where you can't print to the screen.
Add this to your functions.php:

Robin Hislop さんは自分でフィルターフックをcodex?から見つけた風のことを言っていますが、どうやって探してらっしゃるのかはイマイチわかりませんでした。

投稿2020/02/29 19:39

bokupiroki

総合スコア54

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問