很多朋友問小編薇曉朵的附件下載頁面是怎麼做的,其實呢有很多種方法來實現附件下載頁,之前是寫了個 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 下載頁面的效果了。