You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress中创建单篇文章自定义下载页面

解决WordPress文章下载路径无法获取自定义字段的问题

一、添加自定义重写规则

WordPress默认不会识别文章URL后追加的/download路径,需要先添加重写规则,让系统将该路径映射到对应文章的查询逻辑中。

将以下代码添加到主题的functions.php文件或自定义插件中:

// 注册下载页面重写规则
function add_download_rewrite_rule() {
    add_rewrite_rule(
        '^([^/]+)/download/?$',
        'index.php?name=$matches[1]&download_page=1',
        'top'
    );
}
add_action('init', 'add_download_rewrite_rule');

// 添加自定义查询变量,让WordPress识别download_page参数
function add_download_query_var($vars) {
    $vars[] = 'download_page';
    return $vars;
}
add_filter('query_vars', 'add_download_query_var');

添加完成后,进入WordPress后台「设置-固定链接」页面,直接点击「保存更改」(无需修改任何设置),触发重写规则刷新。

二、创建下载页面模板

在主题目录下新建一个名为single-download.php的模板文件,内容如下:

<?php
/**
 * Template: 文章专属下载页
 */

// 验证是否为下载请求且存在对应文章
if (get_query_var('download_page') && have_posts()) {
    the_post();
    // 获取自定义字段中的下载链接
    $download_url = get_post_meta(get_the_ID(), 'download_id', true);
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
    <meta charset="<?php bloginfo('charset'); ?>">
    <title><?php the_title(); ?> - 下载页面</title>
    <?php wp_head(); ?>
</head>
<body>
    <div class="download-wrap">
        <h1><?php the_title(); ?> 资源下载</h1>
        <?php if (!empty($download_url)) : ?>
            <a href="<?php echo esc_url($download_url); ?>" class="download-btn" target="_blank">点击开始下载</a>
        <?php else : ?>
            <p>该文章暂未设置可用下载链接</p>
        <?php endif; ?>
        <p><a href="<?php the_permalink(); ?>">返回文章详情页</a></p>
    </div>
    <?php wp_footer(); ?>
</body>
</html>
<?php
} else {
    // 无对应文章时显示404页面
    get_template_part('404');
}
?>

三、可选:用钩子替代独立模板(无需新建文件)

如果不想单独创建模板文件,可通过template_include钩子直接在现有模板逻辑中插入下载页内容,代码如下:

function inject_download_page_content($template) {
    if (get_query_var('download_page')) {
        ob_start();
        if (have_posts()) {
            the_post();
            $download_url = get_post_meta(get_the_ID(), 'download_id', true);
            ?>
            <div class="download-page">
                <h2><?php the_title(); ?> 下载</h2>
                <?php if (!empty($download_url)) : ?>
                    <a href="<?php echo esc_url($download_url); ?>" class="download-button">立即下载</a>
                <?php else : ?>
                    <p>抱歉,此文章未配置下载链接</p>
                <?php endif; ?>
                <p><a href="<?php the_permalink(); ?>">回到文章详情</a></p>
            </div>
            <?php
        } else {
            get_template_part('404');
        }
        $content = ob_get_clean();
        echo $content;
        exit; // 终止原有模板加载,直接输出下载页内容
    }
    return $template;
}
add_filter('template_include', 'inject_download_page_content');

四、调试验证

  1. 访问任意已设置download_id字段的文章的/download路径(如https://example.com/your-post-slug/download/),检查是否正常显示下载按钮。
  2. 若无法正常加载,排查以下点:
    • 确认download_id自定义字段已正确保存下载链接(可在文章编辑页的「自定义字段」面板查看);
    • 在模板中加入var_dump(get_query_var('download_page')),验证重写规则是否生效;
    • 确保代码已正确添加到functions.php或自定义插件中,且主题未禁用自定义重写规则。

内容的提问来源于stack exchange,提问作者James Son

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:35:21