Heim  >  Fragen und Antworten  >  Hauptteil

Zeigen Sie in WooCommerce Metadaten zu Bestelldetails in E-Mails zur Checkout-Bestätigung und auf Administrator-Bestellseiten an

Wir haben eine Reihe von Produkten, die als „Kits“ definiert sind. Es handelt sich um Produktlisten, die aus anderen Produkten bestehen. Die Daten, die die Suite definieren, werden im Metadaten-Array gespeichert. Ich habe einen Hook erstellt, um Metadaten auf der Produktseite und im Warenkorb anzuzeigen. Ich muss etwas Ähnliches in der „E-Mail der abgeschlossenen Bestellung“ und auf der „Admin-Bestellseite“ tun, weiß aber nicht, wie ich das machen soll. Dies ist der Hook, den ich erstellt habe: <pre class="brush:php;toolbar:false;">add_filter( 'bis_show_kit_meta', 'bis_show_kit_meta_contents', 10, 3 ); Funktion bis_show_kit_meta_contents($productID) { global $wpdb; $postMeta = get_post_meta($productID,'',true); if ((isset($postMeta['bis_kit_id'])) and ($postMeta['bis_kit_id'][0] > 1)) { echo 'Dies ist ein Kit, das die folgenden Elemente enthält:<br>'; echo $postMeta['bis_kit_type'][0].'<br>'; foreach($postMeta as $kititem) { foreach ($kititem als $value) { $newvalue = unserialize($value); if ($newvalue) { $newvalue2 = unserialize($newvalue); if($newvalue2['type']=="kititem"){ echo '<li>' .$newvalue2['quantity'] ' -> } } } } } }</pre> Die aktuelle Funktion ist bereits in das entsprechende Template in meinem Child-Theme eingebunden. Ich weiß nicht, wie ich eine ähnliche Funktion auf die Datei <code>customer-completed-email.php</code> anwenden soll, und auch nicht, wo ich sie auf der Seite zum Bearbeiten der Bestellung durch den Administrator einbinden soll. Ich habe in einem anderen Beitrag Code gefunden, der dem ähnelt, was ich tun muss, aber ich kann nicht herausfinden, in welcher Datei sich die Änderungen an der Administratorbestellung befinden. Der Code, den ich gefunden habe, ist: <pre class="brush:php;toolbar:false;">add_action('woocommerce_before_order_itemmeta','woocommerce_before_order_itemmeta',10,3); Funktion woocommerce_before_order_itemmeta($item_id, $item, $product){ ... }</pre> Für jeden Rat wäre ich sehr dankbar
P粉022140576P粉022140576453 Tage vor418

Antworte allen(1)Ich werde antworten

  • P粉736935587

    P粉7369355872023-08-16 10:40:06

    WooCommerce已经有了一堆钩子,你可以在WooCommerce模板中使用它们,而不是添加自己的钩子...

    良好的开发规则是首先使用现有的钩子。如果没有方便或可用的钩子,那么你可以通过子主题覆盖WooCommerce模板。为什么?因为模板有时会更新,然后你需要更新编辑过的模板,而钩子则不需要。

    对于“客户完成订单”通知,请使用woocommerce_order_item_meta_end动作钩子,如下所示:

    // 将email_id设置为全局变量
    add_action('woocommerce_email_before_order_table', 'set_email_id_as_a_global', 1, 4);
    function set_email_id_as_a_global($order, $sent_to_admin, $plain_text, $email = null ){
        if ( $email ) {
            $GLOBALS['email_id_str'] = $email->id;
        }
    }
    
    // 在“客户完成订单”电子邮件通知中显示自定义订单项元数据
    add_action( 'woocommerce_order_item_meta_end', 'custom_email_order_item_meta', 10, 2 );
    function custom_email_order_item_meta( $item_id, $item ){
        // 获取email ID全局变量
        $refGlobalsVar = $GLOBALS;
        $email_id = isset($refGlobalsVar['email_id_str']) ? $refGlobalsVar['email_id_str'] : null;
    
        // 仅适用于“客户完成订单”电子邮件通知
        if ( ! empty($email_id) && 'customer_completed_order' === $email_id ) {
            bis_show_kit_meta_contents( $item->get_product_id() );
        }
    }
    

    这将允许你仅在“客户完成订单”通知中显示自定义元数据。

    或者,你可以将钩子替换为具有相同函数变量参数的woocommerce_order_item_meta_start

    将代码放在你的子主题的functions.php文件中或插件中。

    Antwort
    0
  • StornierenAntwort