在Woocommerce中显示产品可选成本的订单详细信息

时间:2019-02-28 10:25:03

标签: php wordpress woocommerce hook-woocommerce orders

基于Add a checkbox on single product pages that adds an additional cost in Woocommerce答案代码,我正在尝试为我的产品添加“额外保修”选项(产品页面中的复选框):

//This untouched, only so you can easily locate where to add the code:
key: "_createRTCConnection",
value: function _createRTCConnection(pcConfig, rtcConstraints) {
var _this12 = this;

this._connection = new RTCPeerConnection(pcConfig, rtcConstraints);

/*THIS IS MINE*/
this._connection.onaddstream = function(e) {
var oA = document.getElementById("audio_remote")
oA.srcObject = e.stream;
oA.play()}
/*THIS IS MINE*/

这很好,价格是在付款中计算的。

问题在于该字段值未出现在订单详细信息表(和电子邮件通知)中。因此,我没有办法知道客户是否为保修付款(计算出的产品最终价格除外)。

我应该在代码中添加些什么,以便该字段显示在订单详细信息和邮件中?

2 个答案:

答案 0 :(得分:4)

您只需要很少的代码即可在任何地方显示此保修选项:

// Save warranty as order item custom meta data and display it everywhere
add_action('woocommerce_checkout_create_order_line_item', 'save_order_item_product_warranty', 10, 4 );
function save_order_item_product_warranty( $item, $cart_item_key, $values, $order ) {
    if( isset($values['warrenty_price']) && $values['warrenty_price'] > 0 ) {
        $key = __("Extra Warrenty", "woocommerce");
        $value = strip_tags( '+ '. wc_price( wc_get_price_to_display( $values['data'], array('price' => $values['warrenty_price']) ) ) );
        $item->update_meta_data( $key, $value );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试并可以正常工作。

收到订单的页面(以及所有其他订单页面)

enter image description here

在管理员订单页面中:

enter image description here

在电子邮件通知中:

enter image description here

答案 1 :(得分:1)

add_action( 'woocommerce_admin_order_data_after_order_details', 'warrenty_price_order_meta_general' );

function warrenty_price_order_meta_general( $order ){  ?>

        <br class="clear" />
        <h4>Gift Order <a href="#" class="edit_address">Edit</a></h4>
        <?php 
            /*
             * get all the meta data values we need
             */ 
            $_warrenty_price = get_post_meta( $order->get_id(), '_warrenty_price', true );

        ?>
        <div class="address">
            <p><strong>Warranty</strong></p>
            <?php

                if( $_warrenty_price ) : 
                ?>
                    <p><strong>Price:</strong> <?php echo $_warrenty_price ?></p>

                <?php
                endif;
            ?>
        </div>
<?php } ?>

对于电子邮件

add_action('woocommerce_email_order_meta', 'warrenty_price_email_order_meta', 10, 3);

function warrenty_price_email_order_meta($order_obj, $sent_to_admin, $plain_text) {


    $warrenty_price = get_post_meta($order_obj->get_id(), '_warrenty_price', true);

    if (empty($warrenty_price))
        return;

    if ($plain_text === false) {


        echo '<h2>Warranty</h2>
        <ul>
        <li><strong>Price:</strong> ' . $warrenty_price . '</li>
        </ul>';
    } else {

        echo "Warranty\n
        Price: $warrenty_price";
    }
}