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

WordPress短代码显示近10年年份异常:全部显示当前年份的解决方法

问题解决:WordPress短代码[year1]-[year10]显示相同年份的修复方案

问题根源

原代码的核心问题是:所有year1至year10短代码都绑定到同一个year_shortcode函数,但函数仅读取默认的num=1参数,从未从短代码名称中提取对应的数字。因此无论调用哪个短代码,计算逻辑都基于num=1,最终返回当前年份。


修复方案一:通过短代码标签提取数字(推荐)

修改函数逻辑,利用WordPress短代码的第三个参数(当前调用的短代码标签)提取对应数字,实现动态计算:

function year_shortcode($atts, $content = null, $tag) {
    // 从短代码标签(如year1)中提取数字部分
    preg_match('/year(\d+)/', $tag, $matches);
    if (!isset($matches[1])) {
        return '';
    }
    
    $num = intval($matches[1]);
    
    if ($num >= 1 && $num <= 10) {
        $current_year = intval(date('Y'));
        // 计算目标年份:year1=当前年,year2=当前年-1...year10=当前年-9
        $year = $current_year - ($num - 1);
        return $year;
    }

    return '';
}

// 保持原有的短代码注册逻辑
add_shortcode('year1', 'year_shortcode');
add_shortcode('year2', 'year_shortcode');
add_shortcode('year3', 'year_shortcode');
add_shortcode('year4', 'year_shortcode');
add_shortcode('year5', 'year_shortcode');
add_shortcode('year6', 'year_shortcode');
add_shortcode('year7', 'year_shortcode');
add_shortcode('year8', 'year_shortcode');
add_shortcode('year9', 'year_shortcode');
add_shortcode('year10', 'year_shortcode');

修改要点:

  1. 新增$tag参数,获取当前调用的短代码标签(如year5)
  2. 用正则表达式从标签中提取数字,替代原有的默认参数逻辑
  3. 保留原年份计算逻辑,确保yearN对应「当前年份 - (N-1)」的结果

修复方案二:批量注册短代码(更简洁)

通过循环批量注册短代码,每个短代码绑定独立的匿名函数,直接传入对应数字:

// 循环生成10个短代码,避免重复代码
for ($i = 1; $i <= 10; $i++) {
    add_shortcode("year{$i}", function() use ($i) {
        $current_year = intval(date('Y'));
        return $current_year - ($i - 1);
    });
}

优势:

  • 代码更简洁,无需维护重复的add_shortcode语句
  • 每个短代码的逻辑独立,避免参数解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:32:53