當前位置: 首頁> 最新文章列表> 將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()的結果是服務器時間標準,如果插件要適配不同服務器地區,還需要更精細的時區處理。

  • 請為你的插件添加合理的錯誤提示,比如用戶拒絕共享位置信息時。