播放 audio/video 个文件而不是在 Woocommerce "My Account" 下载部分下载它们

Playing audio/video files instead of downloading them on Woocommerce "My Account" downloads section

我有一个关于 WooCommerce 和可下载文件的快速问题。我想让购买的产品在我的帐户部分播放,而不是轻松下载它们(与 WooCommerce 处理 downloadable/virtual 产品的方式完全相反)。

我已设法在“我的帐户”部分 (templates/order/order-downloads.php) 中找到处理“可下载产品”视图的代码,但我无法使其工作,因为link 结果是“安全版本”

https://example.com/?download_file=XXXX&order=wc_order_cSzbzLqustvlw&email=XXXXXXXX&key=XXXXX

而不是 friendly/unsecured 文件 URL

https://example.com//my-music.mp3


我已更改此行以使其用作音频短代码,但它无法播放,因为它没有获得完整文件 URL。

case 'download-file':
    echo do_shortcode('[audio src="' . esc_url( $download['download_url'] ) . '"]');
    break;

我知道更改那里的代码不是最好的方法,但我只是想让它以一种客户可以播放文件但不能直接下载文件的方式工作。你能帮我实现这个目标吗?

编辑

Martin Mirchev 的帮助下,我得到了以下信息:

case 'download-file':
    $url_file = esc_url( $download['file']['file'] );
    $address = explode(".", $url_file);
    if ($address[2] == "mp3") {
    echo "<div id='content' class='fancybox-hide' style='min-width:450px; min-height:250px;'>";
    echo do_shortcode('[audio src="' . esc_url( $download['file']['file'] ) . '"]');
    echo "</div>";
    echo "<a href='#content' class='ari-fancybox'>Listen to MP3</a>";
    }

是否可以在 WooCommerce 中应用相同的定制而不是覆盖模板文件?

无需覆盖模板文件,可以使用woocommerce_account_downloads_column_{$column_id}复合动作钩子,其中$column_id为download-file

所以你得到:

function action_woocommerce_account_downloads_column_download_file( $download ) {
    // Targeting view order pages only
    if ( ! is_wc_endpoint_url( 'downloads' ) ) return;

    // Getters
    $url_file = esc_url( $download['file']['file'] );
    $address = explode( ".", $url_file );

    // Compare
    if ( $address[2] == "mp3" ) {
        echo "<div id='content' class='fancybox-hide' style='min-width:450px; min-height:250px;'>";
        echo do_shortcode( '[audio src="' . $url_file . '"]' );
        echo "</div>";
        echo "<a href='#content' class='ari-fancybox'>Listen to MP3</a>";
    } else {
        echo '<a href="' . esc_url( $download['download_url'] ) . '" class="woocommerce-MyAccount-downloads-file button alt">' . esc_html( $download['download_name'] ) . '</a>';
    }
}
add_action( 'woocommerce_account_downloads_column_download-file', 'action_woocommerce_account_downloads_column_download_file', 10, 1 );