【发布时间】:2021-06-26 11:57:35
【问题描述】:
我创建了一些代码来显示 woocommerce>>订单上的库存可用性。见图片(特殊注释)。
问题是,如果我更改自定义字段文本,那么之前的所有订单都会更新为新的自定义字段文本。
例如:一位客户在 2021 年 1 月确认了产品订单,其中自定义字段文本为“产品将于 2021 年 3 月上市”。第二位客户在 2021 年 3 月确认了相同的产品订单,其中新的自定义字段文本为“产品将于 2021 年 5 月上市”。
两个订单都显示最后一个自定义字段文本“产品将于 2021 年 5 月上市”。
我想显示带有旧自定义字段文本的旧订单和带有新自定义字段文本的新订单。如果任何机构可以解决它或可以给我一些想法,它将对我有帮助。
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'display_order_data_in_admin' );
function display_order_data_in_admin( $order ){
?>
<h4><?php _e( 'Speciellnotering', 'woocommerce' ); ?></h4>
<?php
foreach ( $order->get_items() as $item_id => $item ) {
//fetch text from custom_field
$product = $item->get_product();
$availability = $product->get_availability();
$quantity = $item->get_quantity();
$product_id = $item->get_product_id();
$variation_id = $item->get_variation_id();
$sku = get_post_meta( $variation_id, '_sku', true );
$custom_text_message = get_post_meta( $variation_id, 'custom_field', true );
if($product->is_type('variable')){
if($custom_text_message && $quantity<=-1){
$availability['availability'] = $custom_text_message;
}elseif(!$custom_text_message && $quantity<=-1){
$availability['availability'] = __('Right now is not available', 'woocommerce');
}else{
$availability['availability'] =__('Finns i lager', 'woocommerce');
}
?>
<?php echo __( 'Artnr' ).' ('.$sku.')' .': '.$availability['availability'].'<br>';
//for simple product
}else{
$product = $item->get_product();
$sku=$product->get_sku();
$availability = $product->get_availability();
$custom_stock_message=get_post_meta( $product_id, 'custom_stock_message', true );
$quantity = $item->get_quantity();
if($product->is_type('simple')){
if($custom_stock_message && $quantity<=0){
$availability['availability'] = $custom_stock_message;
}elseif(!$custom_stock_message && $quantity<=0){
$availability['availability'] = __('Right now is not available', 'woocommerce');
}else{
$availability['availability'] =__('Finns i lager', 'woocommerce');
}
}
?>
<?php echo __( 'Artnr' ).' ('.$sku.')' .': '.$availability['availability'].'<br>';
}
}?>
<?php
}
【问题讨论】:
-
您将此自定义文本存储在产品或产品变体上,那么您期望会发生什么?如果您想要以特定顺序针对特定项目的特定内容 - 那么然后将其存储在 该项目上。
-
如何在产品或特定项目中存储自定义文本?你能写示例代码吗?那么我很容易理解。
-
在您的代码中,您使用的是
$quantity = $item->get_quantity();,其值始终最多为1 (大于零),因此$quantity<=-1或@ 987654326@ 永远是假的……这意味着在你的 IF / ELSE 语句中你总是落在 ELSE 部分。 -
嗨 LoicTheAztec,问题不在于 if else 逻辑......逻辑运行良好并获得了我的预期输出。但是已经描述的问题是,当我在必要时更改自定义字段的文本时,它会影响所有(新+旧)订单。
标签: php wordpress woocommerce backend custom-fields