composer是一個好東西,類似node中的npm,在接觸沒多久的時候就一直有個想法,能不能在wordpress中使用composer,因為composer有大量非常好且實用的資源。
在早前的時候我的做法是這樣的,先建立一個wordpress項目,在wordpress根目錄中建立一個composer.json之后,執(zhí)行`composer install`來進(jìn)行包管理。那結(jié)果根目錄就會像這樣。
wp-admin/wp-content/wp-include/vendor/composer.jsoncomposer.lockindex.phplicense.txtreadme.htmlwp-activate.phpwp-blog-header.phpwp-comments-post.phpwp-config-sample.phpwp-cron.phpwp-links-opml.phpwp-load.phpwp-login.phpwp-mail.phpwp-settings.phpwp-signup.phpwp-trackback.phpxmlrpc.php
使用過wordpress的朋友應(yīng)該對這樣的結(jié)構(gòu)都不會陌生,他存在以下幾個問題:
最近在網(wǎng)上無意找了些資料,發(fā)現(xiàn)有種方法可以使得wordpress更好的搭配composer進(jìn)行包的依賴管理。最終可以實現(xiàn)如下的目錄結(jié)構(gòu)
wp-content/wp/vendor/composer.jsoncomposer.lockindex.php
下面我將個人實踐的方法做個簡單的記錄,和網(wǎng)上搜索到的普遍資料有些不一樣,我個人做了一些優(yōu)化,具體有哪些優(yōu)化,請繼續(xù)往下看。
1.初次安裝需要先配置`composer.json`,我的配置信息如下
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 | { "name" : "亂燉" , "description" : "亂燉 - 研究web" , "version" : "0.1.1" , "license" : "GPL" , "homepage" : "http://levi.cg.am" , "authors" : [{ "name" : "Levi" , "email" : "cgfeel@gmail.com" , "homepage" : "http://levi.cg.am" }], "repositories" : [{ "type" : "composer" , "url" : "http://wpackagist.org" }, { "type" : "package" , "package" : { "name" : "wordpress" , "type" : "webroot" , "version" : "4.1.1" , "dist" : { "type" : "zip" , "url" : "https://wordpress.org/latest.zip" } } }], "require" : { "php" : ">=5.3.0" , "wordpress" : "4.1.1" , "fancyguy/webroot-installer" : "1.0.0" , "levi/lv" : "dev-master" , "wpackagist-plugin/cnblogs2wp" : "0.6.4" , "wpackagist-plugin/wp-patch-levi" : "0.2.9" , "wpackagist-theme/twentyfifteen" : "1.0" }, "extra" : { "webroot-dir" : "wp" , "webroot-package" : "wordpress" } } |
這段composer配置信息大致意思如下:
2.保存文件后,執(zhí)行安裝
1 | composer install |
待出現(xiàn)類似下面的提示信息后,就表示資源包已下載到本地了
Loading composer repositories with package informationInstalling dependencies (including require-dev) - Installing fancyguy/webroot-installer (1.0.0) Downloading: 100% - Installing wordpress (3.8) Downloading: 100%Writing lock fileGenerating autoload files
3.通過瀏覽器訪問目錄`wp/`,進(jìn)行安裝wordpress,安裝步驟省略,這個網(wǎng)上教程太多了,不復(fù)雜,如果不了解請自行搜索。
這有兩種情況,一種是你之前就已安裝過wordpress,但是沒有安裝使用composer進(jìn)行包管理;還有一種就是上面提到的,全新安裝的用戶,這類用戶如果按照步驟來的話,看到這里實質(zhì)上也已完成對wordpress安裝了。
所以無論哪種情況,接下來要做的就是劃分目錄。在網(wǎng)上搜索“將wordpress安裝在網(wǎng)站子目錄”會有很多相關(guān)資料,wordpress官方也有一個,可直接從后臺常規(guī)設(shè)置中找到入口連接。大致上都是千篇一律,如下:
這樣做看上去似乎沒錯,但是卻存在幾個問題
首先關(guān)于這兩個函數(shù)`get_option(‘home’)`和`get_option(`siteurl`)`大家能分得清嗎?什么地方用`home`,設(shè)么地方用`siteurl`?ok,假定你能分得清楚,那能保證其他人能分清楚嗎?比如說你使用的主題的作者,或者插件作者?如果分不清,這將直接造成你的博客在后續(xù)使用過程中造成URL錯亂。
其次,設(shè)置了`home`還有`siteurl`,那么就會記錄在庫中,這次我們要將`wp/`作為二級目錄,如果下次我們想修改下二級目錄名稱為`levi/`,思考下,步驟有多麻煩;而如果是多站點博客,那就更恐怖了,每一個站點都要改一次,噩夢~
下面我針對這幾個問題,做了一次較大的優(yōu)化,我要讓`wordpress`做成“平”的,就算將wordpress放入二級目錄,我也讓他使用一級目錄進(jìn)行訪問。我的做法如下:
1 | require ( dirname( __FILE__ ) . '/wp/wp-blog-header.php' ); |
1 | define( 'ABSPATH' , dirname( __FILE__ ) . '/' ); |
在其下方設(shè)置WP_CONTENT_DIR,如下:
1 | define( 'WP_CONTENT_DIR' , dirname(ABSPATH). '/wp-content' ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent; if (-f $request_filename) { set $rule_2 1; } if (-d $request_filename) { set $rule_2 1; } if ($rule_2 = "1" ) { #ignored: “-” thing used or unknown variable in regex/rew } if ($rule_2 != "1" ) { rewrite ^ /wp- (.*) /wp/wp- $1 last; rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last; rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last; rewrite /. /index .php last; } |
關(guān)鍵是這一句,意思是將所有主域下以wp-開頭的請求作為二級目錄進(jìn)行解析
1 | rewrite ^ /wp- (.*) /wp/wp- $1 last; |
至此,如果是全新安裝的用戶,就已經(jīng)完成wordpress安裝了,而本身已安裝wordpress而調(diào)整到二級目錄的用戶,還需要配置composer信息,配置composer信息請參照“全新用戶安裝”的方法
wordpress安裝好了,接下來就是通過composer進(jìn)行包管理了。網(wǎng)上有很多方法,這里我推薦一個比較簡單的方法。打開剛才的配置文件composer.json,其中有這么一段:
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 | "repositories" : [{ "type" : "composer" , "url" : "http://wpackagist.org" }, { "type" : "package" , "package" : { "name" : "wordpress" , "type" : "webroot" , "version" : "4.1.1" , "dist" : { "type" : "zip" , "url" : "https://wordpress.org/latest.zip" } } }], "require" : { "php" : ">=5.3.0" , "wordpress" : "4.1.1" , "fancyguy/webroot-installer" : "1.0.0" , "levi/lv" : "dev-master" , "wpackagist-plugin/cnblogs2wp" : "0.6.4" , "wpackagist-plugin/wp-patch-levi" : "0.2.9" , "wpackagist-theme/twentyfifteen" : "1.0" }, |
意思是通過http://wpackagist.org對包進(jìn)行管理,并且通過在`require`可以添加package資源、wordpress主題和插件,讓其通過composer進(jìn)行管理(安裝、升級)。
您也可以自行添加所需的資源、類庫。添加完成后,在根目錄輸入以下命令進(jìn)行更新
1 | composer update |
插個題外話,composer國內(nèi)使用太慢,composer國內(nèi)鏡像及其不穩(wěn)定,經(jīng)常502,不推薦使用,建議大家使用日本鏡像,http://composer-proxy.jp/
使用方法如下:
通過下面命令,查看composer的`home`所謂路徑
1 | composer config -g -e |
通過homebrew安裝的用戶,`home`的位置一般在`~/.composer/`,修改目錄下的`config.json`,將下面這段添加進(jìn)去,保存并退出
1 2 3 4 5 6 7 8 9 | { "repositories" : [ { "packagist" : false }, { "type" : "composer" , "url" : "http://composer-proxy.jp/proxy/packagist" } ] } |
composer的特定之一就是擁有很龐大的PHP資源,通過composer管理wordpress后,如何在wordpress中調(diào)用composer下的資源呢?
打開wp/wp-config.php,在下面這段之前
1 | require_once (ABSPATH . 'wp-settings.php' ); |
增加composer提供的自動加載類,如下:
1 | include dirname(ABSPATH). '/vendor/autoload.php' ; |
這樣你僅需在適當(dāng)?shù)漠?dāng)方通過命名空間,直接使用第三方資源。
優(yōu)化了wordpress目錄結(jié)構(gòu)后,除了wordpress核心文件以外都可以任意修改,他們包含:
若擅自修改wordpress核心文件,那你可得小心咯,下次升級時,代碼會自動被覆蓋哦
有經(jīng)驗的朋友也許會說,直接`push`唄。沒錯,不過可以排除剛才使用composer托管的所有資源,修改`.gitignore`,添加信息如下:
1 2 3 4 5 6 | ############### # wordpress # ############### vendor/ wp/ wp-content/ |
完成后進(jìn)行提交,這個時候git上就只有4個文件了
README.mdindex.phpLICENSEcomposer.json
之后,我需要在其他環(huán)境下部署wordpress,僅僅只要像下面這樣就可以構(gòu)建一套完整的wordpress
1 2 | git pull origin master composer update |
混沌代碼布局,現(xiàn)在總算抽離開了。通過composer來管理wordpress有幾個好處
最后,有什么問題,大家可以給我留言哦,別忘了關(guān)注我的博客哦:
http://list.qq.com/cgi-bin/qf_invite?id=b6eb34388fd016582957d6e50d005146e24fe6b166ee66c0