composer是一个好东西,类似node中的npm,在接触没多久的时候就一直有个想法,能不能在wordpress中使用composer,因为composer有大量非常好且实用的资源。
在早前的时候我的做法是这样的,先建立一个wordpress项目,在wordpress根目录中建立一个composer.json之后,执行`composer install`来进行包管理。那结果根目录就会像这样。
wp-admin/ wp-content/ wp-include/ vendor/ composer.json composer.lock index.php license.txt readme.html wp-activate.php wp-blog-header.php wp-comments-post.php wp-config-sample.php wp-cron.php wp-links-opml.php wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php
使用过wordpress的朋友应该对这样的结构都不会陌生,他存在以下几个问题:
最近在网上无意找了些资料,发现有种方法可以使得wordpress更好的搭配composer进行包的依赖管理。最终可以实现如下的目录结构
wp-content/ wp/ vendor/ composer.json composer.lock index.php
下面我将个人实践的方法做个简单的记录,和网上搜索到的普遍资料有些不一样,我个人做了一些优化,具体有哪些优化,请继续往下看。
1.初次安装需要先配置`composer.json`,我的配置信息如下
{ "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.保存文件后,执行安装
composer install
待出现类似下面的提示信息后,就表示资源包已下载到本地了
Loading composer repositories with package information Installing dependencies (including require-dev) - Installing fancyguy/webroot-installer (1.0.0) Downloading: 100% - Installing wordpress (3.8) Downloading: 100% Writing lock file Generating autoload files
3.通过浏览器访问目录`wp/`,进行安装wordpress,安装步骤省略,这个网上教程太多了,不复杂,如果不了解请自行搜索。
这有两种情况,一种是你之前就已安装过wordpress,但是没有安装使用composer进行包管理;还有一种就是上面提到的,全新安装的用户,这类用户如果按照步骤来的话,看到这里实质上也已完成对wordpress安装了。
所以无论哪种情况,接下来要做的就是划分目录。在网上搜索“将wordpress安装在网站子目录”会有很多相关资料,wordpress官方也有一个,可直接从后台常规设置中找到入口连接。大致上都是千篇一律,如下:
这样做看上去似乎没错,但是却存在几个问题
首先关于这两个函数`get_option(‘home’)`和`get_option(`siteurl`)`大家能分得清吗?什么地方用`home`,设么地方用`siteurl`?ok,假定你能分得清楚,那能保证其他人能分清楚吗?比如说你使用的主题的作者,或者插件作者?如果分不清,这将直接造成你的博客在后续使用过程中造成URL错乱。
其次,设置了`home`还有`siteurl`,那么就会记录在库中,这次我们要将`wp/`作为二级目录,如果下次我们想修改下二级目录名称为`levi/`,思考下,步骤有多麻烦;而如果是多站点博客,那就更恐怖了,每一个站点都要改一次,噩梦~
下面我针对这几个问题,做了一次较大的优化,我要让`wordpress`做成“平”的,就算将wordpress放入二级目录,我也让他使用一级目录进行访问。我的做法如下:
require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );
define('ABSPATH', dirname(__FILE__) . '/');
在其下方设置WP_CONTENT_DIR,如下:
define('WP_CONTENT_DIR', dirname(ABSPATH).'/wp-content');
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; }
关键是这一句,意思是将所有主域下以wp-开头的请求作为二级目录进行解析
rewrite ^/wp-(.*) /wp/wp-$1 last;
至此,如果是全新安装的用户,就已经完成wordpress安装了,而本身已安装wordpress而调整到二级目录的用户,还需要配置composer信息,配置composer信息请参照“全新用户安装”的方法
wordpress安装好了,接下来就是通过composer进行包管理了。网上有很多方法,这里我推荐一个比较简单的方法。打开刚才的配置文件composer.json,其中有这么一段:
"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对包进行管理,并且通过在`require`可以添加package资源、wordpress主题和插件,让其通过composer进行管理(安装、升级)。
您也可以自行添加所需的资源、类库。添加完成后,在根目录输入以下命令进行更新
composer update
插个题外话,composer国内使用太慢,composer国内镜像及其不稳定,经常502,不推荐使用,建议大家使用日本镜像,http://composer-proxy.jp/
使用方法如下:
通过下面命令,查看composer的`home`所谓路径
composer config -g -e
通过homebrew安装的用户,`home`的位置一般在`~/.composer/`,修改目录下的`config.json`,将下面这段添加进去,保存并退出
{ "repositories": [ { "packagist": false }, { "type": "composer", "url": "http://composer-proxy.jp/proxy/packagist" } ] }
composer的特定之一就是拥有很庞大的PHP资源,通过composer管理wordpress后,如何在wordpress中调用composer下的资源呢?
打开wp/wp-config.php,在下面这段之前
require_once(ABSPATH . 'wp-settings.php');
增加composer提供的自动加载类,如下:
include dirname(ABSPATH).'/vendor/autoload.php';
这样你仅需在适当的当方通过命名空间,直接使用第三方资源。
优化了wordpress目录结构后,除了wordpress核心文件以外都可以任意修改,他们包含:
若擅自修改wordpress核心文件,那你可得小心咯,下次升级时,代码会自动被覆盖哦
有经验的朋友也许会说,直接`push`呗。没错,不过可以排除刚才使用composer托管的所有资源,修改`.gitignore`,添加信息如下:
############### # wordpress # ############### vendor/ wp/ wp-content/
完成后进行提交,这个时候git上就只有4个文件了
README.md index.php LICENSE composer.json
之后,我需要在其他环境下部署wordpress,仅仅只要像下面这样就可以构建一套完整的wordpress
git pull origin master composer update
混沌代码布局,现在总算抽离开了。通过composer来管理wordpress有几个好处
您可能也喜欢: |
开发者福音,0费用,顺畅获取墙外开发资源~ |
不得不说的9款WordPress SEO插件 |
几款GTD任务管理软件试用对比 |
WordPress 简码插件 Shortcodes ultimate(终极简码) |
40个免费及收费的 WordPress 相册主题 |
无觅 |