为什么 WooCommerce 订单短代码会在自定义感谢页面上生成插件通知?
Why does WooCommerce Order Shortcode Generate Plugin Notice on Custom Thank You Page?
我使用我的子主题和 functions.php
.
在 WooCommerce 中创建了一个自定义“谢谢”(order-received
) 页面的重定向
重定向工作正常,我创建的所有其他短代码都工作正常,除了这个。
在我的 Thanks
页面上使用 Gutenberg 插入我的 [order_cost_breakdown]
简码并下订单时,我收到此通知:
Notice: Undefined variable: show_purchase_note in /wp-content/plugins/woocommerce/templates/order/order-details-item.php on line 60
我不确定我需要在该模板中编辑什么才能使它工作,或者我需要在我的短代码函数中更改什么才能使它工作。
这是简码函数:
function order_cost_breakdown(){
if ( isset( $_GET['order_id']) && $_GET['order_id'] > 0 ) {
$order_id = (int) esc_attr( $_GET['order_id'] );
$order = wc_get_order( $order_id );
$order_data = $order->get_data();
ob_start();
?>
<div class="woocommerce-account woocommerce-page"><div class="woocommerce">
<table class="shop_table order_details">
<thead>
<tr>
<th class="product-name"><?php _e( 'Product', 'woocommerce' ); ?></th>
<th class="product-total"><?php _e( 'Total', 'woocommerce' ); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ( $order->get_items() as $item_id => $item ) {
wc_get_template( 'order/order-details-item.php', array (
'order' => $order,
'item_id' => $item_id,
'item' => $item,
'product' => apply_filters( 'woocommerce_order_item_product', $item->get_product( $item ), $item ) ) );
}
?>
<?php do_action( 'woocommerce_order_items_table', $order ); ?>
</tbody>
<tfoot>
<?php
foreach ( $order->get_order_item_totals() as $key => $total ){
?>
<tr>
<th scope="row"><?php echo $total['label']; ?></th>
<td><?php echo $total['value']; ?></td>
</tr>
<?php
}
?>
</tfoot>
</table>
</div>
</div>
<?php
return ob_get_clean();
}
}
如果有人能帮助我理解和/或解决这个问题,那将非常有帮助。
在woocommerce的源代码中可以看到:https://github.com/woocommerce/woocommerce/blob/00e38b51ef9276f0063d9df7796f19b92ca3ff76/templates/order/order-details.php,有这个订单级别$show_purchase_note
,它被传递到预测循环中的每个项目视图。这控制是否应显示产品级采购备注(如果有)。你也应该这样做:
算出它的值:
$show_purchase_note = $order->has_status( apply_filters( 'woocommerce_purchase_note_order_statuses', array( 'completed', 'processing' ) ) );
并将其连同产品购买单的值(注意最后两个模板参数)一起发送到循环中的每个项目视图:
wc_get_template( 'order/order-details-item.php', array (
'order' => $order,
'item_id' => $item_id,
'item' => $item,
'product' => apply_filters( 'woocommerce_order_item_product', $item->get_product( $item ), $item ),
'show_purchase_note' => $show_purchase_note,
'purchase_note' => $product ? $product->get_purchase_note() : '',
));
我使用我的子主题和 functions.php
.
order-received
) 页面的重定向
重定向工作正常,我创建的所有其他短代码都工作正常,除了这个。
在我的 Thanks
页面上使用 Gutenberg 插入我的 [order_cost_breakdown]
简码并下订单时,我收到此通知:
Notice: Undefined variable: show_purchase_note in /wp-content/plugins/woocommerce/templates/order/order-details-item.php on line 60
我不确定我需要在该模板中编辑什么才能使它工作,或者我需要在我的短代码函数中更改什么才能使它工作。
这是简码函数:
function order_cost_breakdown(){
if ( isset( $_GET['order_id']) && $_GET['order_id'] > 0 ) {
$order_id = (int) esc_attr( $_GET['order_id'] );
$order = wc_get_order( $order_id );
$order_data = $order->get_data();
ob_start();
?>
<div class="woocommerce-account woocommerce-page"><div class="woocommerce">
<table class="shop_table order_details">
<thead>
<tr>
<th class="product-name"><?php _e( 'Product', 'woocommerce' ); ?></th>
<th class="product-total"><?php _e( 'Total', 'woocommerce' ); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ( $order->get_items() as $item_id => $item ) {
wc_get_template( 'order/order-details-item.php', array (
'order' => $order,
'item_id' => $item_id,
'item' => $item,
'product' => apply_filters( 'woocommerce_order_item_product', $item->get_product( $item ), $item ) ) );
}
?>
<?php do_action( 'woocommerce_order_items_table', $order ); ?>
</tbody>
<tfoot>
<?php
foreach ( $order->get_order_item_totals() as $key => $total ){
?>
<tr>
<th scope="row"><?php echo $total['label']; ?></th>
<td><?php echo $total['value']; ?></td>
</tr>
<?php
}
?>
</tfoot>
</table>
</div>
</div>
<?php
return ob_get_clean();
}
}
如果有人能帮助我理解和/或解决这个问题,那将非常有帮助。
在woocommerce的源代码中可以看到:https://github.com/woocommerce/woocommerce/blob/00e38b51ef9276f0063d9df7796f19b92ca3ff76/templates/order/order-details.php,有这个订单级别$show_purchase_note
,它被传递到预测循环中的每个项目视图。这控制是否应显示产品级采购备注(如果有)。你也应该这样做:
算出它的值:
$show_purchase_note = $order->has_status( apply_filters( 'woocommerce_purchase_note_order_statuses', array( 'completed', 'processing' ) ) );
并将其连同产品购买单的值(注意最后两个模板参数)一起发送到循环中的每个项目视图:
wc_get_template( 'order/order-details-item.php', array (
'order' => $order,
'item_id' => $item_id,
'item' => $item,
'product' => apply_filters( 'woocommerce_order_item_product', $item->get_product( $item ), $item ),
'show_purchase_note' => $show_purchase_note,
'purchase_note' => $product ? $product->get_purchase_note() : '',
));