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

合并登录验证与倒计时功能的PHP短代码开发需求

合并登录验证与倒计时下载短代码实现方案

以下是完全符合需求的合并代码(基于WordPress环境,若为其他PHP框架,仅需替换登录判断和当前URL获取的对应函数即可):

<?php
function login_protected_download_shortcode($atts) {
    // 提取短代码参数并设置默认值
    $atts = shortcode_atts([
        'url' => '',          // 登录后可访问的下载链接(必填)
        'label' => '立即下载', // 已登录状态下的按钮文字
        'class' => 'download-btn', // 按钮自定义CSS类
        'minutes' => 0,       // 倒计时分钟数
        'seconds' => 30,      // 倒计时秒数
    ], $atts);

    // 校验必填参数:未设置下载链接时返回提示
    if(empty($atts['url'])) {
        return '<p style="color:red;">请配置下载链接参数 `url`</p>';
    }

    // 已登录用户直接展示下载链接
    if(is_user_logged_in()) {
        return sprintf(
            '<a href="%s" class="%s">%s</a>',
            esc_url($atts['url']),
            esc_attr($atts['class']),
            esc_html($atts['label'])
        );
    }

    // 未登录用户:渲染倒计时组件与登录按钮
    $total_seconds = ($atts['minutes'] * 60) + $atts['seconds'];
    $current_page_url = urlencode(get_permalink()); // 编码当前页面URL作为重定向参数
    $login_redirect_url = home_url('/login/?redirect_to=' . $current_page_url);

    ob_start(); ?>
    <div class="download-countdown-wrapper">
        <div id="download-countdown" class="countdown-text">
            请等待 <?php echo esc_html($atts['minutes']); ?> 分 <?php echo esc_html($atts['seconds']); ?> 秒后登录下载
        </div>
        <a href="<?php echo esc_url($login_redirect_url); ?>" class="<?php echo esc_attr($atts['class']); ?>" id="login-download-btn" style="display:none;">登录下载</a>
    </div>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            let remainingSeconds = <?php echo esc_js($total_seconds); ?>;
            const countdownElement = document.getElementById('download-countdown');
            const loginButton = document.getElementById('login-download-btn');

            const countdownTimer = setInterval(function() {
                const mins = Math.floor(remainingSeconds / 60);
                const secs = remainingSeconds % 60;

                countdownElement.textContent = `请等待 ${mins} 分 ${secs.toString().padStart(2, '0')} 秒后登录下载`;

                remainingSeconds--;
                if(remainingSeconds < 0) {
                    clearInterval(countdownTimer);
                    countdownElement.style.display = 'none';
                    loginButton.style.display = 'inline-block'; // 可根据需求改为block等显示方式
                }
            }, 1000);
        });
    </script>
    <?php return ob_get_clean();
}
// 注册短代码
add_shortcode('protected_download', 'login_protected_download_shortcode');
?>

参数说明

  • url:必填项,指定登录后可直接访问的下载链接
  • label:可选,已登录状态下的按钮文字,默认值为「立即下载」
  • class:可选,按钮的自定义CSS类名,默认值为「download-btn」
  • minutes:可选,倒计时分钟数,默认值为0
  • seconds:可选,倒计时秒数,默认值为30

使用示例

[protected_download url="https://example.com/resource.zip" label="获取资源" class="custom-download-btn" minutes="1" seconds="30"]

核心逻辑说明

  1. 登录状态判断:使用WordPress内置的is_user_logged_in()函数,其他PHP框架可替换为对应登录校验方法
  2. 重定向处理:通过get_permalink()获取当前页面URL并编码,拼接到登录链接的redirect_to参数,确保用户登录后返回当前页面
  3. 倒计时实现:前端JS实时更新倒计时文本,倒计时结束后自动隐藏倒计时、显示登录按钮
  4. 安全防护:所有输出内容均通过esc_*系列函数转义,避免XSS攻击

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:52:20