web-dev-qa-db-fra.com

PDF télécharger - utiliser les fonctions wordpress

Je crée un plugin où l'utilisateur peut télécharger des fichiers. Actuellement, j'affiche des liens de téléchargement tels que:

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

Problème:

J'ai besoin d'utiliser les fonctionnalités principales de Wordpress telles que is_user_logged_in() ou get_current_user_id() dans le fichier download.php. Comment puis-je utiliser ces fonctions dans ce fichier php?

(PS: je ne veux pas inclure wp-load dans download.php)

4
QuickSort

Vous devez créer une fonction dans votre plugin où vous écoutez une URL spécifique ou surveillez des paramètres spécifiques. Par exemple pour générer le lien de téléchargement:

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

Et pour télécharger le fichier:

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;
}
1
Robin

WordPress fournit quelques cookies qui permettent de savoir si l'utilisateur est connecté et quel est son identifiant. Celles-ci sont décrites sur cette page du Codex :

Après la connexion, wordpress définit le cookie wordpress_logged_in_ [hash], qui indique quand vous êtes connecté et qui vous êtes, pour la plupart des utilisations d'interface.

WordPress définit également quelques cookies wp-settings- {time} - [UID]. Le numéro à la fin est votre ID utilisateur individuel de la table de base de données des utilisateurs. Ceci est utilisé pour personnaliser votre vue de l'interface d'administration, et éventuellement aussi de l'interface du site principal.

Si vous devez absolument éviter de charger wp-load.php dans votre fichier download.php, vous pouvez vérifier l'existence de ces cookies dans votre fichier à l'aide de $_COOKIE global et analyser le cookie wp-settings-{time}-[UID] pour obtenir l'ID utilisateur ("UID").

Honnêtement, j'estime qu'il s'agit d'un gaspillage par rapport à l'inclusion des deux lignes suivantes en haut de votre fichier download.php:

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

Cela ne chargera aucun fichier de thème ni fonction de modèle, mais vous donnera instantanément accès aux fonctions de base de WordPress que vous recherchez. Je vous encourage à essayer dans les deux sens (si vous êtes si enclin) et à voir la différence de performances ... ce ne sera pas beaucoup, surtout sur un serveur exécutant PHP7.

0
brianjohnhanna