[WordPress] 指定提醒網站會員注意事項的功能

本篇文章更新時間:2024/01/10
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


昨天因應客戶需求開發,想要設計一個能在前端顧客瀏覽網站時出現通知的功能。

這功能不是全站大橫幅「公告」類型,而是「針對性」的指定通知某個顧客的方式。由於是與系統發信同步,所以就沒有特別設計一個後台來做指定顧客與內容的方法,純粹條件滿足有發信,就補上這樣的通知給使用中的顧客提醒。

方法設計如下:

  1. 發信時,一併將標題與內文存入 _usermeta 資料表。
  2. 顧客登入狀態下,檢查資料表中是否有留下訊息。
  3. 有的話,就輸出成前端 JavaScript Alert 方式提醒。

存入 _usermeta 資料表

$now = time();
wp_mail($customer_email, $subject, $body, $headers);
$notice = array(
    'subject' => $subject,
    'body'    => $body,
);
update_user_meta($user_id, 'mxp_notice_alert_' . $now, $notice);

存入的邏輯或是內容等,都可以自己根據使用情境配置,哪怕是設計過一個後台介面指定顧客與指定內容都可以。關鍵程式碼如上,將通知訊息存入使用者的中繼資料表中。

檢查是否有留下訊息,並輸出


// 如果使用者有通知需要顯示,就抓出來顯示
function mxp_show_notice_alart() {
    $user_id = get_current_user_id();
    if ($user_id == 0 || wp_doing_ajax() || is_ajax() || wp_doing_cron()) {
        return;
    }
    if (is_product() || is_product_category() || is_product_tag() || is_shop() || is_singular()) {
        global $wpdb;
        $get_all_notice = $wpdb->get_results($wpdb->prepare("SELECT meta_key FROM {$wpdb->prefix}usermeta WHERE meta_key LIKE %s AND user_id = %d", 'mxp_notice_alert_%', $user_id), ARRAY_A);
        foreach ($get_all_notice as $key => $notice) {
            $notice_key  = $notice['meta_key'];
            $notice_data = get_user_meta($user_id, $notice_key, true);
            if (!empty($notice_data) && is_array($notice_data)) {
                $subject = str_replace('
', '\n', $notice_data['subject']); $body = str_replace('
', '\n', $notice_data['body']); echo ""; delete_user_meta($user_id, $notice_key); } } } } add_action('wp_footer', 'mxp_show_notice_alart');

前端部分,透過 wp_footer 這個 Hook 勾點來檢查,查詢使用者 _usermeta 中繼資料表是否有紀錄還沒發送。

確保顧客是在瀏覽某些頁面下才輸出提示,避免某些背後執行的做法(Ex: AJAX, CRON ...等 )觸發。

再來就是把通知內容撈出來組合成 JavaScript 通知方法顯示於前端給瀏覽器觸發,完成!

最後記得刪除這筆已經顯示於前端通知的訊息,清空訊息佇列。

後記

機制還滿簡單的,關鍵的部分要注意是想要在哪裡「勾」起來,需要多補一些判斷來確保。

有些勾點不一定會在使用者真的有在瀏覽時才會觸發,可能是某個後端請求或是背景執行時就有被呼叫到,導致訊息其實沒有準確地傳達到瀏覽者面前。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon