最近在學習開發Wordpress 的外掛,突然新增了一些特別的WP知識點,故此紀錄。

開發環境初探

使用 Docker

Wordpress 外掛開發切記的幾個核心就是:

  • 不要改到 Wordpress 的核心(例如 wp-includes)
  • 盡量可以使用hook,也就是很多套件提供的do-actionapply_filter等方式,對於我們開發者而言,對應上就是add-actionadd-filter等等

詳情可以參考此網站:https://ithelp.ithome.com.tw/articles/10242112

不過啦,我也還在這學習的過程中,或許以後還有更多不同的體悟XD

而我自己擅長Docker,用他開發的最大好處就是我認為絕對不會改到 Wordpress 和套件的核心。除非你自己進去 cli 給他胡搞瞎搞這樣。

以下就提供我工作中常用的docker-compose.yml 配置。搭配phpmyadmin幫助我進入資料庫做 check

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     platform: linux/x86_64 # 因為最近工作機換成 M1 系列,發現需要額外加上這個參數才不會出錯

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       # 方便debug 與開發上使用,如果還想要額外的 volumes 可以另外在加 
       - ./wp-config.php:/var/www/html/wp-config.php
       - ./debug.log:/var/www/html/wp-content/debug.log
       #  develop plugins
       - ./src/r567tw-tappay:/var/www/html/wp-content/plugins/r567tw-tappay
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress

   phpmyadmin:
     links:
       - db:db
     image: phpmyadmin/phpmyadmin
     ports:
       - "8000:80"
     restart: always
     environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: root
     platform: linux/x86_64 # 因為最近工作機換成 M1 系列,發現需要額外加上這個參數才不會出錯

volumes:
    db_data: {}

打完收工。接下來使用docker-compose up -d 就可以快快樂樂的開發plugintheme囉 😆

使用 LocalWP

不過啊,最近我還是趁著Udemy打折買了Wordpress 開發的相關課程,覺得也是蠻有收穫跟學習的,他在課程裡面介紹一個開發的工具也很方便,我覺得可以放在這裡給大家看看,是知名Wordpress界 WP-開發的localWp,感覺真的也很不錯用啊啊啊

https://localwp.com/

對了,我在上的課程是:Become a WordPress Developer: Unlocking Power With Code

推薦給大家^^

MU-plugin

Wordpress 基本上他其實已經可以作為一個產品了,如果你是個有能力的開發者,用它架站基本上只是半天甚至是幾秒鐘可以完成的事情。而它提供了蠻多pattern可以讓開發者去遵循,但我認爲沒有像laravel這麼方便啦,畢竟兩者完全不太一樣不太能比較…

而我發現到在Wordpress有一個mu-plugin的概念,它位於wp-content/mu-plugins這裡,mu的意思就是Must Use,也就是你不會在後台看到他,而且他一定會被啟動的

所以說,上面的yaml檔我甚至改成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# (略)...
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       # 方便debug 與開發上使用,如果還想要額外的 volumes 可以另外在加 
       - ./wp-config.php:/var/www/html/wp-config.php
       - ./debug.log:/var/www/html/wp-content/debug.log
       #  develop plugins
       - ./src/r567tw-tappay:/var/www/html/wp-content/plugins/r567tw-tappay
+      # Mu plugins
+      - ./src/mu-plugins:/var/www/html/wp-content/mu-plugins
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
# (略)...

供文件作參考:https://wordpress.org/documentation/article/must-use-plugins/

覺得Wordpress的架構才是神架構

之前在讀程式設計師從零開始邁向架構師之路這本書,學到蠻多的架構設計相關的知識。

其中,我最喜歡的就是:

架構設計的目的是為了解決複雜度帶來的問題

想到以前有個很爛很爛的經驗,公司找了個「架構師」過來,發現他根本…再增加複雜度 XD

約莫去年底才看完那本書,然後老實講技術書很難寫心得文,於是使用筆記給他筆記起來,提供大家參考參考:架構設計筆記

在講到可擴展性的章節這裡,作者整理出幾種常見的模式

  • 分層架構
  • SOA 架構
  • 微服務
  • 微內核架構(plug-in)

原來,Wordpress使用所謂的themeplugin管理,正就是書中所提到的微內核架構Wordpress專注他的核心、其他功能就可以用hook的方式勾進去,難怪會有這麼高的市佔率!

可說是Wordpress不滅,PHP也不滅啊…

小君曰: 還是又回到 PHP 的懷抱裡