Добавить файл продукта Ссылка для скачивания на страницу с благодарностью WooCommerce - PullRequest
1 голос
/ 17 мая 2019

Я использую этот код, чтобы клиент мог загрузить файл непосредственно со страницы «Спасибо» после того, как покупка была завершена. Проблема в том, что она выдает ошибку "WP_Hook->apply_filters(NULL, Array)"

Вот код, который я использую:

add_action( 'woocommerce_thankyou', 'add_download_link_to_thank_you_page' );
function add_download_link_to_thank_you_page() {
$downloads = $product->get_files();
foreach( $downloads as $key => $each_download ) {
  echo '<a href="'.$each_download["file"].'">Download Item</a>';
}}

Не понимаю, что с ним не так.

1 Ответ

0 голосов
/ 17 мая 2019

Переменная $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 );
...