合并登录验证与倒计时功能的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:可选,倒计时分钟数,默认值为0seconds:可选,倒计时秒数,默认值为30
使用示例
[protected_download url="https://example.com/resource.zip" label="获取资源" class="custom-download-btn" minutes="1" seconds="30"]
核心逻辑说明
- 登录状态判断:使用WordPress内置的
is_user_logged_in()函数,其他PHP框架可替换为对应登录校验方法 - 重定向处理:通过
get_permalink()获取当前页面URL并编码,拼接到登录链接的redirect_to参数,确保用户登录后返回当前页面 - 倒计时实现:前端JS实时更新倒计时文本,倒计时结束后自动隐藏倒计时、显示登录按钮
- 安全防护:所有输出内容均通过
esc_*系列函数转义,避免XSS攻击
内容的提问来源于stack exchange,提问作者Aakash
相关产品推荐
相关产品推荐

