我使用WooCommerce,并编写了一个函数,它根据库存状态显示预期交货的日期范围...
供参考:Display an estimated delivery date range based on WooCommerce cart item stock
现在我想输出计算的日期范围到我的管理面板中的每个订单。
对于订单编辑页面中的WordPress后端我使用以下代码:
add_action( 'add_meta_boxes', 'add_meta_boxes' );
function add_meta_boxes() {
add_meta_box( 'woocommerce-order-my-custom', __( 'Order Custom' ),
'order_my_custom', 'shop_order', 'side', 'default'
);
}
function order_my_custom(){
echo "Voraussichtliche Lieferung<br> $from - $to";
}
计算日期范围,并在前端显示此代码:
add_filter ( 'woocommerce_cart_collaterals', 'lieferzeit');
add_filter ( 'woocommerce_thankyou_lieferung', 'lieferzeit');
function lieferzeit() {
$all_items_in_stock = true; // initializing
// Iterating through cart items (to get the stock info)
foreach (WC()->cart->get_cart() as $cart_item) {
# HANDLING SIMPLE AND VARIABLE PRODUCTS
// Variable products
$variation_id = $cart_item['variation_id'];
if( 0 != $variation_id) {
$variation_obj = new WC_Product_variation($variation_id);
$stock = $variation_obj->get_stock_quantity();
} else {
// Simple products
$product_id = $cart_item['product_id'];
$product_obj = new WC_Product($product_id);
$stock = $product_obj->get_stock_quantity();
}
if( $stock <= 0 ){
// if an item is out of stock
$all_items_in_stock = false;
break; // We break the loop
}
}
// Items "in stock" (1 to 4 week days)
if( $all_items_in_stock ){
for( $start=0, $count=-1 ; $count < 4; $start++ ){
$weekdays = date('w', strtotime("+$start days"));
if( $weekdays > 0 && $weekdays < 6 ){
$count++;
// echo date('D j (w)', strtotime("+$start days")).', ';
if($count == 1){
$from = date('D, d.m.', strtotime("+$start days") );
} elseif($count == 4) {
$to = date('D, d.m.', strtotime("+$start days") );
}
}
}
} else { // 1 is Items Out of stock (14 to 21 week days)
for( $start=0, $count=-1 ; $count < 21; $start++ ){
$weekdays = date('w', strtotime("+$start days"));
if( $weekdays > 0 && $weekdays < 6 ){
$count++;
if($count == 14){
$from = date('D, d.m.', strtotime("+$start days") );
} elseif($count == 21) {
$to = date('D, d.m.', strtotime("+$start days") );
}
}
}
}
## TRANSLATION ##
// DAYS IN ENGLISH (Source)
$days_en = array('Mon''Tue','Wed','Thu','Fri');
// TRANSLATE the DAYS in GERMAN (replacement)
$days_ge = array('Mo','Di','Mi','Do','Fr');
$from = str_replace($days_en, $days_ge, $from);
$to = str_replace($days_en, $days_ge, $to);
## OUTPUT ##
// echo "Voraussichtliche Lieferung<br> $from - $to";
echo '<i class="shipping_icon fa fa-truck fa-flip-horizontal" aria-hidden="true"></i> <div class="lieferung"> Vorauslichtliche Lieferung </div> <div class="fromto_date"> ' . $from . ' – ' . $to . ' </div> <div class="tooltip">
<span class="tooltiptext">Gilt nur bei Lieferungen nach Deutschland.</span></div>' ;
}
我的问题是函数lieferzeit()
的“估计交货范围”数据没有出现在函数add_meta_boxes()
中。
当提交订单以在相应的订单后端元盒中显示它时,它希望存储(函数lieferzeit()
的)“估计交付范围”数据。
如果我尝试在thank you页面中添加函数lieferzeit()
的输出,它可以工作,但是它不存储数据。
那么如何保存和获取计算出的日期范围数据,以便在我需要的任何地方使用它呢?
谢谢
2条答案
按热度按时间b4qexyjb1#
我在你代码里做了一些小改动。
1.我已经嵌入了所有的购物车计算代码围绕交货范围的基础上,产品库存可用性在一个单独的功能(非挂钩),我可以调用任何地方。
$from
和$to
**,以便在提交订单时发布该数据。所以你的代码应该是:
此代码经过测试并正常工作
您将在后端订单编辑页面中获得:
6l7fqoea2#
我建议您为函数添加前缀以避免冲突。
例如
add_action( 'add_meta_boxes', 'cust_add_meta_boxes' );
如果有一种方法可以存储函数lieferzeit()的输出,而不会改变输出,那就太好了。
例如,您可以将其存储为 meta数据
将函数
order_my_custom()
修改为: