当前位置: 首页> 最新文章列表> 如何将 date_sunset() 嵌入 WordPress 插件中,实时显示用户当地的日落时间?

如何将 date_sunset() 嵌入 WordPress 插件中,实时显示用户当地的日落时间?

M66 2025-05-31

在开发 WordPress 插件时,我们经常会需要根据用户的地理位置提供动态内容,比如日出日落时间。PHP 自带的 date_sunset() 函数可以方便地计算日落时间。但要实时显示用户“当地”的日落时间,需要结合一些定位技术。
本文将带你一步步实现,在 WordPress 插件中嵌入 date_sunset() 并动态显示日落时间。

第一步:获取用户的地理位置(经纬度)

PHP 运行在服务器端,无法直接访问用户设备的地理位置。因此,我们需要使用 JavaScript 获取用户经纬度,并通过 AJAX 将信息传回服务器。

// 在你的插件主文件或特定的 PHP 文件中添加
function m66net_enqueue_location_script() {
    wp_enqueue_script('m66net-location-script', 'https://m66.net/js/location.js', array('jquery'), null, true);
    
    // 通过 wp_localize_script 把 AJAX URL 传递给 JS
    wp_localize_script('m66net-location-script', 'm66net_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php')
    ));
}
add_action('wp_enqueue_scripts', 'm66net_enqueue_location_script');

location.js 文件示例(存放在 https://m66.net/js/location.js):

jQuery(document).ready(function($){
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
            $.post(m66net_ajax_object.ajax_url, {
                action: 'm66net_send_location',
                latitude: position.coords.latitude,
                longitude: position.coords.longitude
            }, function(response) {
                $('#m66net-sunset-time').html(response);
            });
        });
    } else {
        $('#m66net-sunset-time').html('无法获取您的位置信息');
    }
});

第二步:处理 AJAX 请求并计算日落时间

接下来,我们在 WordPress 中创建一个处理用户地理位置信息并返回日落时间的 AJAX 接口。

function m66net_calculate_sunset() {
    if (isset($_POST['latitude']) && isset($_POST['longitude'])) {
        $latitude = floatval($_POST['latitude']);
        $longitude = floatval($_POST['longitude']);
        
        $timestamp = time();
        
        $sunset = date_sunset($timestamp, SUNFUNCS_RET_STRING, $latitude, $longitude, 90.583333, date('Z') / 3600);
        
        echo '您当地的日落时间是:' . $sunset;
    } else {
        echo '无法计算日落时间';
    }
    wp_die(); // 重要:终止 AJAX 处理
}

add_action('wp_ajax_m66net_send_location', 'm66net_calculate_sunset');
add_action('wp_ajax_nopriv_m66net_send_location', 'm66net_calculate_sunset');

解释一下:

  • SUNFUNCS_RET_STRINGdate_sunset() 返回格式化后的时间字符串,比如 19:21

  • 90.583333 是标准的海平面气压角度,通常使用这个默认值。

  • date('Z') / 3600 会根据服务器的时区补正。

第三步:在页面上添加一个显示日落时间的位置

最后,在需要显示日落时间的地方(比如文章、页面或小工具),加上一段 HTML:

<div id="m66net-sunset-time">正在获取日落时间...</div>

只要用户访问页面,就会触发 JavaScript,自动检测用户位置,并显示准确的日落时间!

小提示

  • 如果想支持 HTTPS,确保你的 m66.net 资源也走 HTTPS,否则浏览器会阻止混合内容请求。

  • date_sunset() 的结果是服务器时间标准,如果插件要适配不同服务器地区,还需要更精细的时区处理。

  • 请为你的插件添加合理的错误提示,比如用户拒绝共享位置信息时。