올바르게 이해하면 브라우저에 대한 응답이 생성하는 컨텐츠, 즉 파일이며 WordPress에서 생성 된 컨텐츠가 아닌 다음과 같은 URL 을 원 .CSV
하십니까?
http://example.com/download/data.csv
나는 당신이 'template_redirect'
갈고리를 찾고 있다고 생각합니다 . 모든 WordPress 개발자가 익숙해 져야 할 파일이 어느 파일 'template_redirect'
에 /wp-includes/template-loader.php
있는지 찾을 수 있습니다 . 짧고 달콤하며 관리자가 아닌 모든 페이지로드를 라우팅하므로 확인하십시오.
그냥 테마의에 다음을 추가 functions.php
파일이나 그 다른 파일 include
에서 functions.php
:
add_action('template_redirect','yoursite_template_redirect');
function yoursite_template_redirect() {
if ($_SERVER['REQUEST_URI']=='/downloads/data.csv') {
header("Content-type: application/x-msdownload",true,200);
header("Content-Disposition: attachment; filename=data.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo 'data';
exit();
}
}
'/downloads/data.csv'
를 검사 하여 URL 테스트를 확인하십시오 $_SERVER['REQUEST_URI']
. 또한 추가주의 ,true,200
당신에게 header()
당신이 설정 호출 Content-type
; 이는 WordPress가 URL을 인식하지 못하기 때문에 404
"찾을 수 없음" 상태 코드를 설정했기 때문입니다. WordPress 를 대체 하고 HTTP "Okay" 상태 코드를 대신 사용하라는 true
지시 header()
에 따라 문제는 없습니다 .404
200
그리고 여기가 파이어 폭스에서의 모습입니다 ( 참고 이없는 화면을 /downloads/
스크린 샷을 복용하고 주석 후 그냥 추가하는 것이 생각처럼 보였다 때문에 가상 디렉터리를 '/downloads/'
가상 디렉토리) :
(출처 : mikeschinkel.com )
최신 정보
접두사가 붙은 URL에서 다운로드를 처리 /wp-admin/
하여 사용자에게 로그인으로 보호되고 있음을 시각적으로 표시하려면 다운로드를 수행해야합니다. 한 가지 방법에 대한 설명은 다음과 같습니다.
나는 클래스로이 시간을 캡슐화라고 DownloadCSV
하고, 사용자 생성에 "기능" 이라고 'download_csv'
에 대한 'administrator'
역할을 (역할 및 기능에 대해 읽어 여기에 ) 그냥 미리 정의의 오프 피기 백 수 'export'
당신이 경우 그래서 그냥 검색 및 대체하면 같은 역할 'download_csv'
로 호출과 기능을 'export'
제거하십시오 . 그런데 활성화 훅이 필요하기 때문에 테마 파일 에 보관하지 않고 플러그인으로 옮겼습니다 . * register_activation_hook()
activate()
functions.php
또한 "도구" 메뉴 에서 " CSV 다운로드" 메뉴 옵션 을 추가하여 기능에 연결했습니다 .add_submenu_page()
'download_csv'
마지막으로 'plugins_loaded'
후크는 내가 사용할 수있는 가장 적절한 후크이기 때문에 후크를 선택했습니다 . 사용할 수는 'admin_init'
있지만 그 후크는 훨씬 나중에 실행됩니다 (1130 번째 후크 호출 대 3 번째 후크 호출) 왜 WordPress가 필요한 것보다 더 많은 일을 처리해야합니까? (내 장비 후크 플러그인 을 사용하여 사용할 후크를 파악했습니다.)
후크 /wp-admin/tools.php
에서 $pagenow
변수 를 검사하여 URL로 시작 하는지 확인하고 current_user_can('download_csv')
, 확인 하면 해당 URL이 $_GET['download']
포함되어 있는지 테스트 합니다 data.csv
. 그렇다면 실제로 이전과 동일한 코드를 실행합니다. 또한 이전 예제에서 ,true,200
호출을 제거합니다. header()
여기서 WordPress는 그것이 좋은 URL임을 알고 있기 때문에 아직 404 상태를 설정하지 않았습니다. 코드는 다음과 같습니다.
<?php
/*
Plugin Name: Download CSV
Author: Mike Schinkel
Author URI: http://mikeschinkel.com
*/
if (!class_exists('DownloadCSV')) {
class DownloadCSV {
static function on_load() {
add_action('plugins_loaded',array(__CLASS__,'plugins_loaded'));
add_action('admin_menu',array(__CLASS__,'admin_menu'));
register_activation_hook(__FILE__,array(__CLASS__,'activate'));
}
static function activate() {
$role = get_role('administrator');
$role->add_cap('download_csv');
}
static function admin_menu() {
add_submenu_page('tools.php', // Parent Menu
'Download CSV', // Page Title
'Download CSV', // Menu Option Label
'download_csv', // Capability
'tools.php?download=data.csv');// Option URL relative to /wp-admin/
}
static function plugins_loaded() {
global $pagenow;
if ($pagenow=='tools.php' &&
current_user_can('download_csv') &&
isset($_GET['download']) &&
$_GET['download']=='data.csv') {
header("Content-type: application/x-msdownload");
header("Content-Disposition: attachment; filename=data.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo 'data';
exit();
}
}
}
DownloadCSV::on_load();
}
다음은 활성화 된 플러그인의 스크린 샷입니다.
(source : mikeschinkel.com )
그리고 마지막으로 다운로드를 시작한 스크린 샷입니다 :
(source : mikeschinkel.com )