যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি নিম্নলিখিত URL এর মতো কিছু থাকতে চান যার ব্রাউজারটির প্রতিক্রিয়া আপনার উত্পন্ন সামগ্রী, অর্থাত আপনার .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
; এটি কারণ URL টি স্বীকৃতি দেয় না বলে ওয়ার্ডপ্রেস 404
"পাওয়া যায়নি" স্থিতি কোডটি সেট করবে । যদিও ওয়ার্ডপ্রেসটি প্রতিস্থাপন করার true
কথা বলেছে header()
এবং পরিবর্তে 404
এইচটিটিপি 200
"ঠিক আছে" স্থিতি কোডটি ব্যবহার করার ক্ষেত্রে এটি কোনও সমস্যা নয় ।
এবং ফায়ারফক্সে এটি দেখতে কেমন তা এখানে দেখুন ( নোট করুন স্ক্রিনশটটির /downloads/
ভার্চুয়াল ডিরেক্টরি নেই কারণ স্ক্রিনশটটি গ্রহণ এবং এনেটোট করার পরে এটি '/downloads/'
ভার্চুয়াল ডিরেক্টরি যুক্ত করা ভাল ধারণা বলে মনে হয়েছিল ):
(সূত্র: মাইকসচিনেল.কম )
হালনাগাদ
আপনি যদি কোনও ইউআরএল থেকে ডাউনলোডটি হ্যান্ডল করে যেতে চান যা /wp-admin/
ব্যবহারকারীকে ভিজ্যুয়াল ইঙ্গিত দেয় যে এটি লগইন দ্বারা সুরক্ষিত রয়েছে আপনি এটিও করতে পারেন; একটি উপায় বর্ণনা অনুসরণ।
আমি একটি শ্রেণীর মধ্যে এই সময় encapsulated বলা DownloadCSV
, এবং একটি ব্যবহারকারী তৈরি করতে "সামর্থ্য" নামক 'download_csv'
জন্য 'administrator'
ভূমিকা (ভূমিকা এবং কেপেবিলিটিস সম্পর্কে পড়তে এখানে ) আপনি শুধু পূর্বনির্ধারিত বন্ধ piggyback পারে 'export'
মত এবং যদি তাই হয় মাত্র অনুসন্ধান & প্রতিস্থাপন যদি আপনি ভূমিকা 'download_csv'
সঙ্গে 'export'
এবং register_activation_hook()
কল এবং activate()
ফাংশন মুছে ফেলুন । যাইহোক, অ্যাক্টিভেশন হুকের প্রয়োজনীয়তার কারণ হ'ল আমি এটিকে থিমের functions.php
ফাইল না রেখে প্লাগিনে স্থানান্তরিত করেছি *
আমি "সরঞ্জামগুলি" মেনুটি ব্যবহার করে " সিএসভি ডাউনলোড করুন" মেনু বিকল্পটি যুক্ত করে এটিকে সক্ষমতার সাথে যুক্ত করেছি ।add_submenu_page()
'download_csv'
শেষ পর্যন্ত আমি হুকটি বেছে নিয়েছিলাম 'plugins_loaded'
কারণ এটি ব্যবহার করা আমার পক্ষে প্রথম দিকের উপযুক্ত হুক। আপনি ব্যবহার করতে পারেন 'admin_init'
তবে সেই হুকটি অনেক পরে চালানো হয় (১১৩০ তম হুক কল বনাম ৩ য় হুক কল) তাই ওয়ার্ডপ্রেসকে তার প্রয়োজনের চেয়ে আরও বেশি করে ফেলে দেওয়া হোক কেন? ( কোন হুকটি ব্যবহার করতে হবে তা নির্ধারণ করতে আমি আমার ইনস্ট্রুমেন্ট হুক্স প্লাগইন ব্যবহার করেছি।)
আমার ইউআরএলটি ভেরিয়েবলটি /wp-admin/tools.php
পরীক্ষা করে শুরু হয় কিনা তা নিশ্চিত করার জন্য আমি যে হুকটিতে পরীক্ষা করে দেখি $pagenow
, আমি এটি যাচাই করি current_user_can('download_csv')
এবং যদি এটি পাস হয় তবে আমি এটি পরীক্ষা করি $_GET['download']
কিনা তা পরীক্ষা করে দেখি data.csv
; যদি হ্যাঁ আমরা আগের মতো ব্যবহারিকভাবে একই কোডটি চালাই। আমি পূর্বের উদাহরণটিতে ,true,200
কল থেকে header()
কলটিও সরিয়েছি কারণ এখানে ওয়ার্ডপ্রেস জানে এটি একটি ভাল ইউআরএল তাই এখনও 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();
}
এবং এখানে অ্যাক্টিভেটেড প্লাগইনটির একটি স্ক্রিনশট রয়েছে:
(উত্স: mikechinkel.com )
এবং অবশেষে ডাউনলোডটি ট্রিগার করার একটি স্ক্রিনশট এখানে রয়েছে:
(উত্স: mikechinkel.com )