it-swarm.com.de

PDF Download - Verwenden Sie WordPress-Funktionen

Ich erstelle ein Plugin, mit dem Benutzer Dateien herunterladen können. Derzeit zeige ich Download-Links wie:

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

Problem:

Ich muss WordPress-Kernfunktionen wie is_user_logged_in() oder get_current_user_id() in der download.php verwenden. Wie kann ich diese Funktionen in dieser PHP-Datei verwenden?

(PS: Ich möchte wp-load nicht in die download.php aufnehmen)

4
QuickSort

Sie sollten eine Funktion in Ihrem Plugin erstellen, in der Sie eine bestimmte URL anhören oder nach bestimmten Parametern suchen. So generieren Sie beispielsweise den Download-Link:

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

Und um die Datei herunterzuladen:

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 stellt einige Cookies zur Verfügung, mit denen nachverfolgt wird, ob der Benutzer angemeldet ist und welche Benutzer-ID er hat. Diese sind auf dieser Seite im Codex beschrieben :

Nach der Anmeldung legt wordpress das Cookie wordpress_logged_in_ [hash] fest, das angibt, wann Sie angemeldet sind und wer Sie sind.

WordPress setzt auch einige wp-settings- {time} - [UID] Cookies. Die Zahl am Ende ist Ihre individuelle Benutzer-ID aus der Benutzerdatenbanktabelle. Dies wird verwendet, um Ihre Ansicht der Admin-Oberfläche und möglicherweise auch der Haupt-Site-Oberfläche anzupassen.

Wenn Sie unbedingt vermeiden müssen, wp-load.php in Ihre download.php -Datei zu laden, können Sie anhand des $_COOKIE global prüfen, ob diese Cookies in Ihrer Datei vorhanden sind, und das wp-settings-{time}-[UID]-Cookie analysieren, um die Benutzer-ID ("UID") zu erhalten.

Meiner ehrlichen Meinung nach ist dies eine Verschwendung im Vergleich dazu, nur die folgenden zwei Zeilen oben in Ihrer download.php -Datei einzuschließen:

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

Dadurch werden keine Designdateien oder Vorlagenfunktionen geladen, Sie erhalten jedoch sofort Zugriff auf die wichtigsten WordPress-Funktionen, nach denen Sie suchen. Ich würde Sie ermutigen, es in beide Richtungen zu versuchen (wenn Sie so geneigt sind) und den Leistungsunterschied zu sehen ... es wird nicht viel, besonders auf einem Server mit PHP7.

0
brianjohnhanna