在 Laravel 中建立動態 navbar

我們網站常常會在上方會有一個 navbar ,有時候會需要去抓取資料庫動態的資料來顯示。

但是我們又不可能在每個 Controller 去寫這段程式,然後在放到 blade ,這樣真的太暴力,而且往後也不好維護。所以我們可以利用 AppServiceProvider 來達成這件事情

閱讀全文 在 Laravel 中建立動態 navbar

PHP 噴錯『 SSL certificate error: unable to get local issuer certificate』解決方法

在寫 Laravel 的時候,有時候會需要請求外部的 request ,如果請求的是 https ,就有可能會噴出 SSL certificate error: unable to get local issuer certificate

閱讀全文 PHP 噴錯『 SSL certificate error: unable to get local issuer certificate』解決方法

在 formData 表單送出 PUT、PATCH 或 DELETE 方法

HTML 表單再送請求的時候,是沒有支援 PUTPATCH 或 DELETE 這三種 method 的。所以在定義由 HTML 表單所呼叫的 PUTPATCH 或 DELETE 路由時,會需要在表單中增加一個隱藏的欄位: _method 

閱讀全文 在 formData 表單送出 PUT、PATCH 或 DELETE 方法

【第 30 天】總結:WordPress 遇上 Chatbot,像極了愛情

就這樣終於成功地將這三十天的文章都寫完了!明天正好就是連假,可以好好休息了(應該吧)。

 

前面二十天是一開始的蹲馬步學習外掛基礎,我們學會了,為什麼要開發 WordPress 外掛

什麼是 WordPress 外掛?為什麼開發自己的 WordPress 外掛?

如何初始化外掛?

  1. 第一個 WordPress 外掛

什麼是 hooks ?怎麼去用 hooks?

  1. 聊聊 WordPress 的 Action Hooks
  2. 聊聊 WordPress 的 Filter Hooks
  3. WordPress 啟用、停用、刪除外掛

如何在 WordPress 上面 debug?

  1. WordPress 如何 Debug?
  2. WordPress 外掛開發者工具

如何使用 WordPress 的 short code?

  1. WordPress 的 Shortcode

如何去改變 WordPress 的後台選單?

  1. 管理選單
  2. 如何修改 WordPress 的後台設置選項

操作 WordPress 的一些資料方法

  1. 如何管理 WordPress metadata
  2. 自定義 WordPress 文章類型
  3. 自定義 WordPress 分類方法
  4. WordPress 操作資料庫

處理用戶的權限:

  1. WordPress 用戶角色

還會透過內建函式打 API

  1. WordPress 的 HTTP API

在 WordPress 操作 JavaScript、Ajax 和 jQuery

  1. JavaScript、Ajax 和 jQuery 應用到 WordPress

也學會了怎麼排程

  1. WP Cron

最後是上架

  1. 上架第一個外掛到 WordPress.org

而後面的十天真的自己刻出一個會動的外掛。其實網路上也有許多 LINE Notify 相關的外掛,例如:

  1. WP LINE Notify
  2. LINE Auto Post

都是非常優秀的外掛,我們也可以直接拿來用,不過這樣一步一步做,才真正讓我學到許多 WordPress 的知識。也很感謝在這過程中,另一個 Eric 給我各種亂問問題XDD

不過,就如同我在前面說過的,無論是 WordPress 外掛開發,或者是學習其他任何知識都是,都不會是簡單 30 天就能學會所有知識,例如說光是一個 hook 就可以講得很深,絕對不是像我這樣一言兩語就能說完的!所以這 30 天所學的可能連基礎都稱不上,學習 WordPress 的這條路還要繼續下去,所以,我最後會把這次開發的外掛,整理到這個 repository 上面: https://github.com/eric0324/wp-lotify ,之後也會不定期更新,歡迎大家上來按星星,鞭小弟的 code。

最後…工商一下:

如果你喜歡 WordPress ,歡迎來參加 WordPress 小聚

如果你喜歡 chatbot ,歡迎來參加 chatbot 線下小聚

也歡迎來我的部落格跟我交流,我們明年見。

閱讀全文 【第 30 天】總結:WordPress 遇上 Chatbot,像極了愛情

【第 29 天】在這些 WordPress Hooks 放在 LINE Notify

在昨天,我們建立了一個 private function 來發送 LINE Notify 訊息通知。

 

【第 26 天】我們會用到哪些 WordPress hooks? ,我們也試著找出我們想要用、可能要用的 WordPress hooks。今天我們來試著為這些 hooks 掛上 LINE Notify 訊息通知。

在這之前,先附上昨天寫好的 private function ,方便大家參考:

private function line_send_notify($text) {
    $request_params = array(
        "headers" => "Authorization: Bearer {$this->options['token']}",
        "body"    => array(
            "message" => "{$text}"
        )
    );

    $response = wp_remote_post('https://notify-api.line.me/api/notify', $request_params);
}

如果我們要在建立文章後發送通知,就這樣寫就可以了:

add_action('save_post', 'line_send_notify');

亦或者,我們可以透過外掛提供的 hooks 去做事情,比如說訂單通知:

add_action('woocommerce_checkout_update_order_meta', 'line_send_notify');

保險起見,我們還要來先檢查一下,是否存在這個外掛:

if(is_plugin_active('woocommerce/woocommerce.php')) 

會變成這樣:

if(is_plugin_active('woocommerce/woocommerce.php')) {
    add_action('woocommerce_checkout_update_order_meta', 'line_send_notify');
}

為了讓提高程式碼的可維護性,我們把這些 add_action() 放在 __construct 中,會變成這樣


public function __construct()
{
    ...
    add_action('save_post', 'line_send_notify');

    if(is_plugin_active('woocommerce/woocommerce.php')) {
        add_action('woocommerce_checkout_update_order_meta', 'line_send_notify');
    }
    ...    
}

這樣應該就會收到通知囉!

閱讀全文 【第 29 天】在這些 WordPress Hooks 放在 LINE Notify

【第 28 天】在 WordPress 建立傳送 LINE Notify 函式

今天我們要來開始試著寫 LINE notify 這段。我們建立一個 private function 叫做 line_send_notify ,這個函式傳入了一參數叫做 $text

 

這個函式一開始我們先建立 $request_params ,裡面有我們的 header 和 body。其中 header 包含了我們在 【第 27 天】取出 LINE Notify token ,所拿到的 token ,作為 Authorization 的 value。以及在 body 放入 一個 key 為 message ,value 為剛剛函式傳入的 $text 。

$request_params = array(
    "headers" => "Authorization: Bearer {$this->options['token']}",
    "body"    => array(
        "message" => "{$text}"
    )
);

還記得我們在 【第 15 天】WordPress 的 HTTP API ,了解了 WordPress 提供了許多好用的 HTTP API 讓我們可以對第三方發送 HTTP 請求,這時候就可以派出用場了

LINE 官方文件提到要推送 notify 的位址是 https://notify-api.line.me/api/notify ,並且是 POST 方法,然後要傳入剛剛建立好的 header 和 body

$response = wp_remote_post('https://notify-api.line.me/api/notify', $request_params);

這樣我們的訊息應該就可以正常送出去了,完整的程式碼如下:

private function line_send_notify($text) {
        $request_params = array(
            "headers" => "Authorization: Bearer {$this->options['token']}",
            "body"    => array(
                "message" => "{$text}"
            )
        );

        $response = wp_remote_post('https://notify-api.line.me/api/notify', $request_params);
    }

順帶一提,如果想要確認一下我們 API 是否有打成功,我們還可以加入:

$response_code = wp_remote_retrieve_response_code($response);

然後用 if…else… 去判斷狀態碼:

if( $response_code == '200' ){
    // Do something...
} else {
    // Do something...
}

閱讀全文 【第 28 天】在 WordPress 建立傳送 LINE Notify 函式

【第 27 天】取出 LINE Notify token

現在 要給 LINE 的 token 也存好了,想要發送 notify 的地方大概也都有想法了,再來我們要試著取出 token 來做使用。

在前面,我們如果把 token 用成 options 的方式去儲存的話。我們可以複習一下 【第 10 天】如何修改 WordPress 的後台設置選項 裡面我們聊到,我們如何用 get_option() 函式來取得值。

 

 

所以說,我們要取得 token ,可以直接

get_option('token');

為了讓 PHP 代碼可以更簡潔,我們試著改寫成 __construct :

public function __construct()
{
    $this->options = get_option('notify-for-line');
}

這樣我們可以用 $this->options 去取得屬性。換言之,要取用 token 會變成:

$this->options['token']

在這之前,我們還會檢查一下,是真的有 token 可以使用,我們還會多一個 if 邏輯去判斷,如下:

if (isset($this->options['token']) && $this->options['token'] !== '') {
    // do someting(e.g. get token)
}

兩個條件:

  1. token 不為 null
  2. token 不為空字串

再來,我們需要將取得的 token 組成一個字串:

"Authorization: Bearer {$this->options['token']}"

Bearer 是一種 token 方法,有興趣的話可以參考 OAuth 2.0 (RFC 6749) 裡頭清楚的定義了 client 如何去取得 access token 的方法,我這邊就不贅述了。

太好了,我們取得到之前存好的 token 了,接著我們明天要來送出通知了!

閱讀全文 【第 27 天】取出 LINE Notify token