为什么 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() : '',
));