添加产品文件下载链接到“谢谢”页面WooCommerce

时间:2019-05-17 17:03:49

标签: php wordpress woocommerce download orders

我正在使用此代码,以便客户可以在购买完成后直接从“谢谢”页面下载文件。问题是,它给我一个错误,说“ 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 :(得分:0)

您的代码中未定义变量$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 );