很多朋友問小編薇曉朵的附件下載頁面是怎麼做的,其實呢有很多種方法來實現附件下載頁,之前是寫了個 G-download 下載頁面插件,後來小編覺得可以用更簡單的方法實現,所以就是寫一個 php 文件然後直接從數據庫獲取文件的下載鏈接,其實呢 WordPress 自帶了附加頁面只不過大多數主題裏沒有附件頁面 (attachment.php) 的模板文件而已。
想了解附件頁面的調用機制可以看看以下兩篇文章:
WordPress 主題開發教程手記:模板文件的結構講解
WordPress 主題開發教程手記:模板文件的調用機制
不過默認的附件頁面偽靜態鏈接是 http://日誌鏈接/attachment/attachment-name/ 這種鏈接又長又不美觀那麼該如何來修改附件頁面的鏈接結構呢?我們可以使用 functions.php 定義一個 rewrite 規則,代碼如下:
//設置附件的固定鏈接
add_filter('attachment_link','wxd_attachment_link',10,2);
function wxd_attachment_link($link,$post_id){
return home_url('/v7v3/'.$post_id.'/');
}
//設置附件的 rewrite 規則
add_action('generate_rewrite_rules', 'wxd_generate_rewrite_rules');
function wxd_generate_rewrite_rules($wp_rewrite){
$wp_rewrite->rules = wxd_remove_rewrite_rules($wp_rewrite->rules);
$wp_rewrite->extra_rules_top = wxd_remove_rewrite_rules($wp_rewrite->extra_rules_top);
$new_rules = array();
$new_rules['v7v3/([0-9]+)/?$'] = 'index.php?attachment_id=$matches[1]';
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
//刪除附件原來的 rewrite 規則
function wxd_remove_rewrite_rules($rules){
foreach ($rules as $key => $value) {
if( strpos($value, 'attachment') !== false ){
unset($rules[$key]);
}
}
return $rules;
}
(PS:代碼修改自水煮魚)
加上以上代碼後附件頁面的鏈接就成了 http://siteurl/v7v3/media-id/ 這種形式的了,當然你也可以按要求修改成你需要的形式,然後配合自定義字段即可實現類似於 v7v3 下載頁面的效果了。