Holen Sie sich WordPress Login-functionen, ohne etwas zu drucken

Ich möchte ein dynamisch generiertes PDF mit einem Header “File Transfer” bereitstellen

header('Content-Description: File Transfer'); 

Bevor ich das Dokument erzeuge, muss ich jedoch den Benutzernamen und die Anmeldeinformationen des Benutzers überprüfen.

 if(is_user_logged_in()){ $currentUser = wp_get_current_user(); $userLogin = $currentUser->user_login; if(userAllowedAccess($requestID, $userLogin)){ header('Content-Description: File Transfer') ....... file content } else{ //Do nothing... get off my lawn } 

}

Wo gebe ich das an, damit ich keine Header oder Ausgaben von meiner WordPress-Seite bekomme? Ich muss genügend von der API laden, um meine is_user_logged_in () – und wp_get_current_user () – function zu erhalten, aber nichts zu laden, das auf die Seite druckt …

Vorschläge?

Danke- J

Solutions Collecting From Web of "Holen Sie sich WordPress Login-functionen, ohne etwas zu drucken"

Ich denke du meinst den Content-Disposition Header.

Ich habe kürzlich eine sehr ähnliche Sache für einen Kunden gemacht. Meine Waffe der Wahl: benutzerdefinierte Regeln zum Umschreiben.

Fügen Sie zuerst das Neuschreiben hinzu:

 < ?php add_action( 'init', 'wpse27232_add_rewrite' ); /** * Adds the rewrite rule for the download. * * @uses add_rewrite_rule */ function wpse27232_add_rewrite() { add_rewrite_rule( '^download/?$', 'index.php?file_download=true', 'top' ); } 

Wenn jemand yoursite.com/download besucht, yoursite.com/download sie diese Neufassung yoursite.com/download . Beachten Sie die index.php?file_download=true Bit. WordPress hat keine Ahnung, dass file_download eine erkannte file_download sollte. Lassen Sie uns das durch das Filtern von query_vars erkennbar query_vars .

 < ?php add_filter( 'query_vars', 'wpse27232_query_vars' ); /** * Filter our query vars so WordPress recognizes 'file_download' */ function wpse27232_query_vars( $vars ) { $vars[] = 'file_download'; return $vars; } 

Jetzt der spaßige Teil: fangen Sie die file_download und senden Sie die Datei.

 < ?php add_action( 'template_redirect', 'wpse27232_catch_file_dl' ); /** * Catches when the file_download query variable is present. Sends the content * header, the file, and then exits. */ function wpse27232_catch_file_dl() { // No query var? bail. if( ! get_query_var( 'file_download' ) ) return; // change this, obviously. Should be a path to the pdf file // I wrote this as a plugin, hence `plugin_dir_path` $f = plugin_dir_path( __FILE__ ) . 'your-file.pdf'; if( file_exists( $f ) && is_user_logged_in() ) { // Do your additional checks and setup here // Send the headers header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename=' . basename( $f ) ); header( 'Content-Length: ' . filesize($f)); // You may want to make sure the content buffer is clear here // read the pdf output readfile($f); exit(); } else { global $wp_query; $wp_query->is_404 = true; } } 

Schließlich, um dieses kleine Plugin zum functionieren zu bringen, ein Aktivierungs-Hook, um die Rewrite-Regeln zu löschen.

 < ?php register_activation_hook( __FILE__, 'wpse27232_activation' ); function wpse27232_activation() { wpse27232_add_rewrite(); flush_rewrite_rules(); } 

Dafür gibt es mehrere Ansätze:

  • Seitenvorlage
  • Ajax-Aktion
  • benutzerdefinierter Handler, der Core lädt
  • früher Haken (wie template_redirect )
  • und so weiter…

Persönlich würde ich mit Ajax-Action gehen. Es ist eine ziemlich saubere Möglichkeit, eine vollständige Umgebung ohne Ausgabe zu erhalten und nicht zu komplex zu implementieren. Siehe AJAX in Plugins im Codex.