Как определить продукт в шорткоде WooCommerce для использования на странице получения пользовательского заказа

Я пытаюсь понять, как определить продукт в этом коде после внесения в него некоторых изменений на основе ответа на мой предыдущий вопрос Почему шорткод заказа WooCommerce создает уведомление о плагине на пользовательской странице благодарности?

Сообщение уведомления изменилось, и теперь оно просит меня определить продукт. Это уведомление:

Notice: Undefined variable: product in /wp-content/themes/storefront/functions.php on line 842

Уведомление относится к этой строке:

'purchase_note' => $product ? $product->get_purchase_note() : '',

Это полный код:

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();

        $show_purchase_note    = $order->has_status( apply_filters( 'woocommerce_purchase_note_order_statuses', array( 'completed', 'processing' ) ) );

    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 ),
        'show_purchase_note' => $show_purchase_note,
        'purchase_note' => $product ? $product->get_purchase_note() : '',
        ) );
        }
    ?>

    <?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();
    
    }

}

Любой совет полезен, так как я явно не эксперт.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
174
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы исправить уведомление

Заменять

<?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 ),
    'show_purchase_note' => $show_purchase_note,
    'purchase_note' => $product ? $product->get_purchase_note() : '',
    ) );
    }
?>

С

<?php foreach ( $order->get_items() as $item_id => $item ) {
    $product = $item->get_product();

    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() : '',
    ));
}       
?>

Этого должно быть достаточно

Это произошло! Большое спасибо :)

user14817151 18.12.2020 11:11

Другие вопросы по теме