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

在WordPress与WooCommerce中实现公历转波斯太阳历

将WordPress/WooCommerce日期转为波斯太阳历的解决方案

核心思路

通过修改WordPress的日期格式化钩子,替换默认的公历日期输出为波斯历,无需依赖插件,直接在主题的functions.php中添加代码即可实现全站或模板内的日期转换。

代码实现

方法1:全局替换(全站所有日期生效)

将以下代码添加到主题的functions.php文件中:

function convert_to_persian_date($date, $format) {
    // 后台管理页面保留原日期格式,避免影响操作
    if (is_admin()) {
        return $date;
    }

    // 获取原始时间戳,转换失败则返回原日期
    $timestamp = strtotime($date);
    if (!$timestamp) {
        return $date;
    }

    // 初始化波斯历日历对象
    $persian_calendar = new IntlGregorianCalendar();
    $persian_calendar->setTimeZone(new DateTimeZone(wp_timezone_string()));
    $persian_calendar->setTime($timestamp * 1000);

    // 映射公历格式符到波斯历格式符
    $persian_format = str_replace(
        ['Y', 'm', 'd', 'F', 'M', 'l', 'D'],
        ['yyyy', 'MM', 'dd', 'MMMM', 'MMM', 'EEEE', 'EEE'],
        $format
    );

    // 创建日期格式化器并输出波斯历日期
    $formatter = new IntlDateFormatter(
        'fa_IR@calendar=persian',
        IntlDateFormatter::FULL,
        IntlDateFormatter::FULL,
        wp_timezone_string(),
        IntlDateFormatter::TRADITIONAL
    );
    $formatter->setPattern($persian_format);

    return $formatter->format($persian_calendar);
}
add_filter('date_i18n', 'convert_to_persian_date', 10, 2);

方法2:局部替换(仅模板the_time调用生效)

如果仅需要修改模板中the_time输出的日期,用以下代码替换上述全局钩子:

function custom_the_time($format) {
    // 获取文章发布时间戳
    $post_timestamp = get_post_time('U', true);
    
    // 初始化波斯历日历对象
    $persian_calendar = new IntlGregorianCalendar();
    $persian_calendar->setTimeZone(new DateTimeZone(wp_timezone_string()));
    $persian_calendar->setTime($post_timestamp * 1000);

    // 映射公历格式符到波斯历格式符
    $persian_format = str_replace(
        ['Y', 'm', 'd', 'F', 'M', 'l', 'D'],
        ['yyyy', 'MM', 'dd', 'MMMM', 'MMM', 'EEEE', 'EEE'],
        $format
    );

    // 创建日期格式化器并输出波斯历日期
    $formatter = new IntlDateFormatter(
        'fa_IR@calendar=persian',
        IntlDateFormatter::FULL,
        IntlDateFormatter::FULL,
        wp_timezone_string(),
        IntlDateFormatter::TRADITIONAL
    );
    $formatter->setPattern($persian_format);

    return $formatter->format($persian_calendar);
}
// 替换the_time函数的输出
add_filter('the_time', 'custom_the_time', 10, 1);

注意事项

  • 确保服务器已启用Intl扩展(PHP 5.3+默认支持,若未启用需联系主机商开启)。
  • 方法1会覆盖全站所有日期输出,包括文章、评论、WooCommerce订单日期等;方法2仅针对模板中the_time的调用。
  • 如需支持更多日期格式,可扩展str_replace中的格式符映射规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:12:23