¿Cómo puedo configurar un “enlace profundo móvil” a un archivo descargable de woocommerce?

5 minutos de lectura

avatar de usuario
RyanKDalton

Tengo configurado woocommerce en un sitio de wordpress para descargar archivos PDF. Después de que un usuario realiza el proceso de pago y está listo para descargar el archivo, me gustaría verificar si está en un dispositivo móvil o no. Si el usuario no está en un dispositivo móvil, el enlace de descarga sería normal.

Si el usuario está en un dispositivo móvil, me gustaría configurar el enlace de descarga para que sea un “vínculo profundo de la aplicación” utilizando un esquema de URI personalizado (de un proveedor existente). Por ejemplo, en lugar del enlace de descarga que hace referencia http:// o https://me gustaría que el enlace de descarga fuera appname://domain.com/folder/filename.pdf. De esta manera, el PDF se abriría automáticamente en mi aplicación cuando hicieran clic en el enlace. El proveedor de la aplicación ya admite el esquema de URI personalizado, por lo que solo estoy buscando “cómo” configurar el enlace dinámicamente en WordPress/Woocommerce.

¿Cómo voy a hacer:

  1. detectar si el usuario está en un dispositivo móvil, y
  2. cambiar el esquema de URI si es un usuario móvil?

El concepto que estoy tratando de lograr se describe aquí en el ejemplo de “Aplicación nativa”: http://www.mobiloitte.com/blog/enlace-profundo-101

y aquí: https://en.wikipedia.org/wiki/Mobile_deep_linking

  • ¿Qué pasa con los usuarios móviles que no tienes tu aplicación? Sugeriría adaptar la aplicación, por lo que reclama su https://example.com/folder enlaces de descarga, en lugar de utilizar un esquema de URI personalizado. Esto debería ser posible tanto en iOS como en Android.

    – pixelistik

    2 de mayo de 2018 a las 8:49

  • Ese es un muy buen punto, pero en mi caso particular, el código QR proporciona una forma conveniente para que los usuarios carguen el PDF en una aplicación de mapas.

    – RyanKDalton

    3 de mayo de 2018 a las 1:34


Para su primera pregunta, intente usar javascript window.navigator.userAgent o con PHP intente usar $_SERVER['HTTP_USER_AGENT']. Esto debería funcionar independientemente de WordPress u otros detalles del sitio. Ver preguntas relacionadas aquí y aquí.

Para su segunda pregunta, los enlaces profundos se usan para aplicaciones móviles individuales, ¿verdad? La respuesta probablemente depende de la aplicación a la que te diriges. Si se trata de una aplicación existente, es posible que obtenga la mejor tracción si se comunica con el desarrollador de la aplicación. Si está escribiendo una nueva aplicación, hay información para androide aquí y para iOS aquí. Si desea una URL de enlace permanente que se refiera a contenido específico en su página de WordPress (como un evento de transacción específico y un nombre de usuario), puede encontrar información sobre enlaces permanentes y cadenas de consulta con WordPress, por ejemplo. aquí.

  • Estoy usando una aplicación existente de un proveedor que ya admite un esquema de enlace profundo, por lo que le daré sus sugerencias para identificar a los usuarios móviles y configurar el enlace de forma dinámica. Gracias.

    – RyanKDalton

    29/04/2018 a las 14:50

Primero, para ver si estás en una plataforma móvil, WP tiene una función para eso: wp_is_mobile (ver página del códice).

Entonces, si miras la fuente de la class-wc-download-handler.php expediente (mira aquí), en la línea 177 hay un download( $file_path, $product_id ) función. Esto, en la línea 188 genera la ruta de descarga usando apply_filters( 'woocommerce_file_download_filename', $filename, $product_id ) entonces, en teoría, deberías poder engancharte a eso y usar una expresión regular para reemplazar http con tu enlace profundo uri.

Espero que ayude

  • Gracias, definitivamente leeré más sobre estas dos opciones.

    – RyanKDalton

    30 de abril de 2018 a las 16:25

avatar de usuario
Temasfa

El siguiente código se ejecuta antes de cualquier tipo de método de descarga, verificando si es móvil y reemplazando http o https en la URL de descarga con appnamey finalmente redirigir a la nueva URL. En este caso, la URL final debería ser como:

nombreaplicación://dominio.com/carpeta/nombrearchivo.pdf

Copie el siguiente código en functions.php:

add_action( 'woocommerce_download_file_redirect', 'change_download_link_on_mobile' , 1, 2 );
add_action( 'woocommerce_download_file_xsendfile', 'change_download_link_on_mobile', 1, 2 );
add_action( 'woocommerce_download_file_force', 'change_download_link_on_mobile' , 1, 2 );

function change_download_link_on_mobile( $file_path, $filename="" ){
    if( wp_is_mobile () ){
        $file_path  = preg_replace( '/http|https/','appname', $file_path ); // Replace http|https with appname 
        header( 'Location: ' . $file_path );
        exit();
    }
}

  • ¿Puedes dar alguna explicación también?

    – Cada vez más idiota

    3 mayo 2018 a las 16:06

  • este código se ejecuta antes de cualquier tipo de método de descarga y verifica si es móvil, luego reemplaza ‘http’ o ‘https’ en la URL de descarga con ‘appname’ y finalmente redirige al usuario a la nueva URL. en su caso, la URL final debería ser así: appname://domain.com/folder/filename.pdf

    – Temasfa

    3 mayo 2018 a las 16:29

  • @MahdiAkrami, este código parece estar muy cerca, pero no funciona para descargarlo en el dispositivo móvil. Funciona bien para descargar desde una computadora portátil o cuando el navegador móvil está en “modo de escritorio”. Intenté configurar el appname a http para probar el enlace móvil, pero eso tampoco funcionó.

    – RyanKDalton

    4 mayo 2018 a las 15:01

  • Después de más investigaciones, la sintaxis de expresiones regulares no funcionaba correctamente. Actualicé el fragmento de código con una sintaxis funcional para reemplazar varias cadenas. ¡Gracias!

    – RyanKDalton

    7 mayo 2018 a las 22:41

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad