Rumah  >  Soal Jawab  >  teks badan

Dalam WooCommerce, paparkan metadata butiran pesanan dalam e-mel pengesahan pembayaran dan halaman pesanan pentadbir

Kami mempunyai beberapa produk yang ditakrifkan sebagai "kit". Ia adalah senarai produk yang terdiri daripada produk lain. Data yang mentakrifkan suite disimpan dalam tatasusunan metadata. Saya telah mencipta cangkuk untuk memaparkan metadata dalam halaman produk dan troli beli-belah. Saya perlu melakukan sesuatu yang serupa dalam "E-mel Pesanan Selesai" dan "Halaman Pesanan Pentadbiran" tetapi saya tidak tahu bagaimana untuk melakukannya. Ini cangkuk yang saya buat: <pre class="brush:php;toolbar:false;">add_filter( 'bis_show_kit_meta', 'bis_show_kit_meta_contents', 10, 3 ); fungsi bis_show_kit_meta_contents($productID) { global $wpdb; $postMeta = get_post_meta($productID,'',true); if ((isset($postMeta['bis_kit_id'])) dan ($postMeta['bis_kit_id'][0] > 1)) { echo 'Ini ialah Kit yang mengandungi item berikut:<br>'; echo $postMeta['bis_kit_type'][0].'<br>'; foreach($postMeta sebagai $kititem) { foreach ($kititem sebagai $value) { $newvalue = unserialize($value); jika ($nilai baharu) { $newvalue2 = unserialize($newvalue); if($newvalue2['type']=="kititem"){ echo '<li>' .$newvalue2['kuantiti']. } } } } } }</pre> Fungsi semasa sudah disambungkan ke templat yang sepadan dalam tema anak saya. Saya tidak tahu cara menggunakan fungsi serupa pada fail <code>customer-completed-email.php</code> Saya menjumpai beberapa kod dalam siaran lain yang kelihatan serupa dengan perkara yang perlu saya lakukan, tetapi saya tidak dapat mengetahui fail mana yang terdapat pengubahsuaian pada pesanan pentadbir. Kod yang saya temui ialah: <pre class="brush:php;toolbar:false;">add_action('woocommerce_before_order_itemmeta','woocommerce_before_order_itemmeta',10,3); fungsi woocommerce_before_order_itemmeta($item_id, $item, $product){ ... }</pre> Sebarang nasihat akan sangat dihargai
P粉022140576P粉022140576401 hari yang lalu374

membalas semua(1)saya akan balas

  • P粉736935587

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

    WooCommerce sudah mempunyai banyak cangkuk yang boleh anda gunakan dalam templat WooCommerce dan bukannya menambah sendiri...

    Peraturan pembangunan yang baik ialah menggunakan cangkuk sedia ada dahulu. Jika tiada cangkuk yang mudah atau tersedia, maka anda boleh mengatasi templat WooCommerce melalui tema kanak-kanak. kenapa? Kerana templat kadangkala dikemas kini dan kemudian anda perlu mengemas kini templat yang diedit, sedangkan cangkuk tidak.

    Untuk pemberitahuan "Pesanan Pelanggan Selesai", gunakan cangkuk woocommerce_order_item_meta_endaction seperti ini:

    // 将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() );
        }
    }
    

    Ini akan membolehkan anda memaparkan metadata tersuai hanya dalam pemberitahuan "Pesanan Pelanggan Selesai".

    Sebagai alternatif, anda boleh menggantikan cangkuk dengan satu woocommerce_order_item_meta_startdengan argumen pembolehubah fungsi yang sama.

    Letakkan kod dalam fail functions.php tema anak anda atau dalam pemalam.

    balas
    0
  • Batalbalas