当社では「キット」と定義されている製品を多数ご用意しています。他の製品で構成された製品リストです。スイートを定義するデータはメタデータ配列に保存されます。製品ページとショッピング カートにメタデータを表示するフックを作成しました。 「注文完了メール」や「管理者注文ページ」でも同様の操作を行う必要があるのですが、やり方がわかりません。これは私が作成したフックです:
add_filter( 'bis_show_kit_meta', 'bis_show_kit_meta_contents', 10, 3 ); 関数 bis_show_kit_meta_contents($productID) { グローバル $wpdb; $postMeta = get_post_meta($productID,'',true); if ((isset($postMeta['bis_kit_id'])) and ($postMeta['bis_kit_id'][0] > 1)) { echo 'これは次のアイテムが含まれるキットです:
'; echo $postMeta['bis_kit_type'][0].'
'; foreach($postMeta as $kititem) { foreach ($kititem as $value) { $newvalue = unserialize($value); if ($newvalue) { $newvalue2 = unserialize($newvalue); if($newvalue2['type']=="キットアイテム"){ echo '
' .$newvalue2['quantity']. ' -> ' .chr(9). $newvalue2['name']. ''; } } } } } } 現在の関数は、子テーマの対応するテンプレートにすでにフックされています。 同様の関数を
customer-completed-email.php
ファイルに適用する方法も、管理者の編集注文ページのどこにフックすればよいかもわかりません。 別の投稿で、必要なことと似たコードを見つけましたが、管理者の順序への変更がどのファイルに含まれているかわかりません。 私が見つけたコードは次のとおりです。
add_action('woocommerce_before_order_itemmeta','woocommerce_before_order_itemmeta',10,3); function woocommerce_before_order_itemmeta($item_id, $item, $product){ ... }
アドバイスをいただければ幸いです
WooCommerce には、独自のフックを追加する代わりに、WooCommerce テンプレートで使用できるフックがすでに多数あります...
良い開発ルールは、最初に既存のフックを使用することです。便利なフックや利用可能なフックがない場合は、子テーマを介して WooCommerce テンプレートをオーバーライドできます。なぜ?テンプレートは時々更新されるため、編集したテンプレートを更新する必要がありますが、フックは更新しないからです。
「顧客が注文を完了しました」通知の場合は、次のように
リーリーwoocommerce_order_item_meta_end
アクション フックを使用します:これにより、「顧客が完了した注文」通知にのみカスタム メタデータを表示できるようになります。
または、フックを同じ関数変数パラメーターを持つ
woocommerce_order_item_meta_start
に置き換えることもできます。コードを子テーマのfunctions.phpファイルまたはプラグインに配置します。