私たちの店はソフトウェアを販売しており、購入したそれぞれにソフトウェアバウチャーコードを追加しています。購入が完了したら(woocommerce_payment_complete
フック)クーポンコードを生成し、それを wc_add_order_item_meta メソッドで購入した各アイテムに追加します。
要約コード:
add_filter('woocommerce_payment_complete', 'add_voucher_code');
function add_voucher_code( $order_id ) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item) {
for ($i = 1; $i <= $item['qty']; $i++) {
$voucher_code = 'API request based on order information to get voucher code';
wc_add_order_item_meta($item->get_id(), 'Voucher Code', $voucher_code);
}
}
}
なんらかの理由で、アイテムのカスタムメタが注文確認ページに表示されますが、確認メールには表示されません。 (問題1額を平手打ち)したがって、woocommerce_order_item_meta_end
フックして、確認メールに追加します。 ( wc_get_order_item_meta )
要約コード:
add_action('woocommerce_order_item_meta_end', 'email_confirmation_display_order_items', 10, 4);
function email_confirmation_display_order_items($item_id, $item, $order, $plain_text) {
echo '<div>Voucher Code: '. wc_get_order_item_meta( $item_id, 'Voucher Code') .'</div>';
}
問題2は、追加されたコードスニペットが注文確認ページ(現在は2回表示されます)と注文確認メールの両方に表示されることです。 (また額を平手打ち)
現在の問題2の解決策
現在、提案されているifステートメントを追加することで解決しました here 。そのようです:
// Only on emails notifications
if( ! (is_admin() || is_wc_endpoint_url() )) {
echo '<div>Voucher Code: '. wc_get_order_item_meta( $item_id, 'Voucher Code') .'</div>';
}
これは応急処置の修正のように感じられ、洞察/提案は大歓迎です。ありがとう!
これはあまり効果がないので、現在の解決策としてband-aid修正を適用します。
問題1の解決策
追加されたアイテムのメタデータは注文確認ページに表示され、確認メールには表示されません。これを解決するには、woocommerce_order_item_meta_end
フックを使用してアイテムメタを追加します。
問題2の解決策woocommerce_order_item_meta_end
を介して確認メールにアイテムのメタデータを追加すると、確認ページにも追加されます(目に見えて複製されます)。 @LoicTheAztec here によって提案されたifステートメントを追加することで、これを解決しました。
add_action('woocommerce_order_item_meta_end', 'email_confirmation_display_order_items', 10, 4);
function email_confirmation_display_order_items($item_id, $item, $order, $plain_text) {
// Only on emails notifications
if( ! (is_admin() || is_wc_endpoint_url() )) {
echo '<div>Voucher Code: '. wc_get_order_item_meta( $item_id, 'Voucher Code') .'</div>';
}
}
リソース
メール確認フックのビジュアルガイド
wc_get_order_item_meta docs
Woocommerce電子メール通知から不要な注文アイテムのメタデータを除外します