descarga de PDF - use las funciones de wordpress

4

Estoy creando un complemento donde el usuario puede descargar archivos. Actualmente muestro enlaces de descarga como:

<a href="plugin/directory/some/path/download.php?file_to_download_id=1">Some Download</a>

Problema :

Necesito usar la funcionalidad de wordpress core como is_user_logged_in() o get_current_user_id() en download.php. ¿Cómo puedo usar estas funciones en este archivo php?

(PS: No quiero incluir wp-load en download.php)

    
pregunta QuickSort 14.11.2017 - 07:57

3 respuestas

1

Debería crear una función en su complemento donde escuche una URL específica o busque parámetros específicos. Por ejemplo para generar el enlace de descarga:

<?php
    $nonce = wp_create_nonce( 'download-' . $filename );
    echo '<a href="/?_wp_nonce="' . $nonce . '&download=' . $filename . '">Some Download</a>';
?>

Y para descargar el archivo:

if ( ! empty( $_GET['_wp_nonce'] ) && ! empty( $_GET['download'] ) && wp_verify_nonce( $_GET['_wp_nonce'], 'download-' . $_GET['download'] ) ) {
    /*
     * Check if file exists and then output the right headers and the content of the file
     */

    exit;
}
    
respondido por el Robin 14.11.2017 - 08:53
0

WordPress proporciona un par de cookies que rastrean si el usuario ha iniciado sesión y cuál es su ID de usuario. Estos se describen en esta página en el Codex :

  

Después del inicio de sesión, wordpress establece la cookie wordpress_logged_in_ [hash], que indica cuándo está conectado y quién es usted, para la mayoría de los usos de la interfaz.

     

WordPress también establece algunas cookies wp-settings- {time} - [UID]. El número al final es su ID de usuario individual de la tabla de base de datos de usuarios. Esto se utiliza para personalizar su vista de la interfaz de administración, y posiblemente también la interfaz del sitio principal.

Si absolutamente debe evitar cargar wp-load.php en su archivo download.php , puede verificar la existencia de estas cookies en su archivo usando el $_COOKIE global y analice la cookie wp-settings-{time}-[UID] para obtener el ID de usuario (" UID ").

En mi opinión sincera, creo que esto es un desperdicio en comparación con solo incluir las siguientes dos líneas en la parte superior de tu archivo download.php :

define( 'WP_USE_THEMES', false );
require( './wp-load.php' ); 

Esto no cargará ningún archivo de tema ni funciones de plantilla, pero le dará acceso instantáneo a las funciones básicas de WordPress que está buscando. Le animo a que lo intente en ambos sentidos (si lo desea) y vea la diferencia de rendimiento ... no será mucho, especialmente en un servidor que ejecuta PHP7.

    
respondido por el brianjohnhanna 15.11.2017 - 17:00
-3

Como mencionó, el archivo se encuentra en su carpeta de complementos, no necesita agregar el archivo wp-load.php aquí en caso de que no pueda usar las funciones de WordPress predeterminadas. Debe incluir el archivo del archivo PHP principal de su complemento.

Espero que esto resuelva tu consulta.

    
respondido por el Pratik bhatt 14.11.2017 - 08:11

Lea otras preguntas en las etiquetas