基于“ 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*/
这很好,价格是在付款中计算的。
问题在于该字段值未出现在订单详细信息表(和电子邮件通知)中。因此,我没有办法知道客户是否为保修付款(计算出的产品最终价格除外)。
我应该在代码中添加些什么,以便该字段显示在订单详细信息和邮件中?
答案 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文件中。经过测试并可以正常工作。
收到订单的页面(以及所有其他订单页面):
在管理员订单页面中:
在电子邮件通知中:
答案 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";
}
}