अगर मैं आपको सही ढंग से समझता हूं कि आप एक यूआरएल के लिए कुछ करना चाहते हैं, तो निम्न में से किसकी प्रतिक्रिया के लिए ब्राउज़र की सामग्री आपके द्वारा बनाई गई सामग्री होगी, अर्थात आपकी .CSV
फ़ाइल और वर्डप्रेस से कोई उत्पन्न सामग्री नहीं होगी?
http://example.com/download/data.csv
मुझे लगता है कि आप 'template_redirect'
हुक की तलाश कर रहे हैं । आप पा सकते हैं '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
; ऐसा इसलिए है क्योंकि वर्डप्रेस ने 404
"Not Found" स्थिति कोड सेट कर दिया होगा क्योंकि यह URL को नहीं पहचानता है। हालांकि यह कोई समस्या नहीं है क्योंकि वर्डप्रेस ने प्रतिस्थापित करने के लिए true
कहता header()
है 404
और इसके बजाय HTTP 200
"ओके" स्थिति कोड का उपयोग किया है।
और यहाँ यह फ़ायरफ़ॉक्स में कैसा दिखता है ( ध्यान दें कि स्क्रीनशॉट में /downloads/
वर्चुअल डायरेक्टरी नहीं है क्योंकि स्क्रीनशॉट लेने और एनोटेट करने के बाद यह सिर्फ '/downloads/'
वर्चुअल डायरेक्टरी जोड़ने के लिए एक अच्छे विचार की तरह प्रतीत होता है ):
(स्रोत: mikeschinkel.com )
अद्यतन करें
यदि आप चाहते हैं कि डाउनलोड को उस URL से संभाला जाए जो उपसर्ग के साथ /wp-admin/
उपयोक्ता को यह संकेत देने के लिए है कि यह एक लॉगिन द्वारा संरक्षित है तो आप ऐसा भी कर सकते हैं; एक मार्ग का वर्णन इस प्रकार है।
मैं एक वर्ग में इस बार समझाया, कहा जाता है DownloadCSV
, और एक उपयोगकर्ता बनाया करने के लिए "क्षमता" कहा जाता है 'download_csv'
के लिए 'administrator'
भूमिका (भूमिकाओं और क्षमताओं के बारे में पढ़ा यहाँ ) तुम बस पूर्वनिर्धारित के बंद पिगीबैक सकता है 'export'
की तरह है और यदि ऐसा है तो बस खोजें और बदलें यदि आप भूमिका 'download_csv'
के साथ 'export'
और register_activation_hook()
कॉल और activate()
फ़ंक्शन को हटा दें । वैसे, एक सक्रियण हुक की आवश्यकता एक कारण है कि मैंने इसे थीम की functions.php
फ़ाइल में रखने के बजाय एक प्लगइन में स्थानांतरित कर दिया है । *
मैंने "टूल्स" मेनू का उपयोग करके "डाउनलोड सीएसवी" मेनू विकल्प भी जोड़ा और इसे क्षमता से जोड़ा ।add_submenu_page()
'download_csv'
अंत में मैंने 'plugins_loaded'
हुक चुना क्योंकि यह सबसे उपयुक्त हुक था जिसका मैं उपयोग कर सकता था। आप उपयोग कर सकते हैं, 'admin_init'
लेकिन वह हुक बहुत बाद में चलाया जाता है (1130 वीं हुक कॉल बनाम 3 डी हुक कॉल) तो क्यों वर्डप्रेस को जरूरत से ज्यादा फेंक-फेंक काम करना चाहिए? (मैंने अपने इंस्ट्रूमेंट हुक प्लग का इस्तेमाल किया, यह जानने के लिए कि कौन सा हुक इस्तेमाल करना है।)
हुक में मैं यह सुनिश्चित करने के लिए जांच करता हूं कि मेरा URL चर का /wp-admin/tools.php
निरीक्षण करके शुरू होता है $pagenow
, मैं इसे सत्यापित करता हूं current_user_can('download_csv')
और यदि वह पास हो जाता है तो मैं $_GET['download']
यह देखने के लिए परीक्षण करता हूं कि क्या आपके पास है data.csv
; यदि हाँ, तो हम व्यावहारिक रूप से पहले जैसा ही कोड चलाते हैं। मैं पिछले उदाहरण में ,true,200
कॉल से भी हटाता हूं header()
क्योंकि यहां वर्डप्रेस जानता है कि यह एक अच्छा 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();
}
और यहाँ सक्रिय प्लगइन का एक स्क्रीनशॉट है:
(स्रोत: mikeschinkel.com )
और अंत में यहाँ डाउनलोड को ट्रिगर करने का एक स्क्रीनशॉट है:
(स्रोत: mikeschinkel.com )