Reproducir archivos de audio/video en lugar de descargarlos en la sección de descargas “Mi cuenta” de Woocommerce

2 minutos de lectura

avatar de usuario
nabs_kk

Tengo una pregunta rápida sobre WooCommerce y los archivos descargables. Me gustaría hacer que los productos comprados se reproduzcan en la sección Mi cuenta en lugar de descargarlos fácilmente (exactamente lo contrario de cómo WooCommerce maneja los productos descargables/virtuales).

He logrado ubicar el código que maneja la vista de los “Productos Descargables” en la sección Mi Cuenta (templates/order/order-downloads.php), sin embargo no logro hacerlo funcionar, ya que el link da como resultado el “seguro versión”

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

En lugar de la URL de archivo amigable/no segura

https://ejemplo.com//mi-musica.mp3


Cambié esta línea para que funcione como código abreviado de audio; sin embargo, no se reproduce porque no obtiene la URL completa del archivo.

case 'download-file':
    echo do_shortcode('%20)%20.%20'"]');
    break;

Sé que no es el mejor enfoque para cambiar el código allí, sin embargo, solo quiero que funcione de manera que el cliente pueda reproducir el archivo, pero no puede descargarlo directamente. ¿Me pueden ayudar a lograr esto?

EDITAR

Con la ayuda de Martin Mirchev pude obtener lo siguiente:

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('['file']%20)%20.%20'"]');
    echo "</div>";
    echo "<a href="#content" class="ari-fancybox">Listen to MP3</a>";
    }

¿Habría la posibilidad de aplicar la misma personalización en WooCommerce en lugar de sobrescribir el archivo de plantilla?

No es necesario sobrescribir los archivos de plantilla, puede utilizar el woocommerce_account_downloads_column_{$column_id} gancho de acción compuesto, donde $column_id es descargar-archivo

Entonces obtienes:

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( ''%20.%20$url_file%20.%20'' );
        echo "</div>";
        echo "<a href="#content" class="ari-fancybox">Listen to MP3</a>";
    } else {
        echo '<a href="'%20.%20esc_url(%20$download['download_url']%20)%20.%20'" 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 );

  • ¡Gracias por esto!

    – nabs_kk

    18 abr a las 14:18

  • @nabs_kk, De nada. Puede aceptar esta respuesta si desea informar a otros que su problema está resuelto.

    – 7uc1f3r

    20 abr a las 8:40

¿Ha sido útil esta solución?