Переменная $product
не определена в вашем коде, а аргумент ловушки $order_id
отсутствует в функции.
Также вам нужно использовать WC_Order
get_downloadable_items()
метод, который более эффективен с заказами.
Обычно загружаемые элементы отображаются в определенной таблице перед деталями заказа (когда есть загружаемые элементы в зависимости от настроек разрешений), поэтому очень странно, что вы пытаетесь отобразить их иначе.
Поэтому попробуйте следующее:
add_action( 'woocommerce_thankyou', 'add_download_links_to_thank_you_page' );
function add_download_links_to_thank_you_page( $order_id ) {
$order = wc_get_order( $order_id );
$html = [];
if( $downloads = $order->get_downloadable_items() ) {
foreach( $downloads as $download ) {
$html[] = '<a href="'.$download["file"]['file'].'">' . __('Download') . ' "' . $download["file"]['name'] . '"</a>';
}
}
if( ! empty($html) ){
echo implode('<br>', $html);
}
}
Код помещается в файл functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Чтобы отобразить загрузку до таблицы с данными заказа, вы замените:
add_action( 'woocommerce_thankyou', 'add_download_links_to_thank_you_page' );
от
add_action( 'woocommerce_thankyou', 'add_download_links_to_thank_you_page', 10, 5 );