很多朋友问小编薇晓朵的附件下载页面是怎么做的,其实呢有很多种方法来实现附件下载页,之前是写了个 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 下载页面的效果了。