WordPress研究心得

WordPress,當初之因此研究這個,目的是在於開發一個多租戶系統應用。總的來講,WordPress給了我很多啓發和影響。爲此,我決定這個研究心得分享出去。php

總的來講,這篇文章參考了不少朋友們的博客,同時也包括官方網站。css

圍繞以下五個大主題進行討論,其中有些重複了,好比WordPress的安裝、插件和主題下載等等,有這方面經驗的同窗,能夠沒必要細看,直接忽略便可,這篇文章你們能夠根據本身感興趣的來看。html

1、WordPress研究..................................................................................................................................... 1前端

1.wordpress介紹java

2.wordpress研究目的mysql

3.wordpress安裝git

2、WordPress主題..................................................................................................................................... 1web

1.主題架構圖spring

2.主題zip包sql

3.主題上傳和下載

4.主題對於Java開發的啓示

3、WordPress 插件.................................................................................................................................... 1

1.如何下載和安裝插件

2.如何使用插件

3.插件開發帶來的好處和弊端

4.wordpress插件開發對於Java開發效率的啓示

4、WordPress數據庫分析....................................................................................................................... 1

5、WordPress運行原理............................................................................................................................ 1

 

 

 

1、 WordPress研究說明

1.WordPress介紹

WordPress是使用PHP語言開發的博客平臺,用戶能夠在支持PHP和MySQL數據庫的服務器上架設屬於本身的網站。也能夠把 WordPress看成一個內容管理系統CMS)來使用。

WordPress是一款我的博客系統,並逐步演化成一款內容管理系統軟件,它是使用PHP語言和MySQL數據庫開發的。用戶能夠在支持 PHP 和 MySQL數據庫的服務器上使用本身的博客。

WordPress有許多第三方開發的免費模板,安裝方式簡單易用。不過要作一個本身的模板,則須要你有必定的專業知識。好比你至少要懂的標準通用標記語言下的一個應用HTML代碼CSSPHP等相關知識。

WordPress官方支持中文版,同時有愛好者開發的第三方中文語言包,如wopus中文語言包。WordPress擁有成千上萬個各式插件和不可勝數的主題模板樣式。

 

2.研究的目的

學習和研究WordPress的運行機制,致力於提升開發效率,節約開發成本和時間,構建一個高效穩定靈活適應變化的web系統。

 

3.wordpress的安裝

要想使用,必先安裝,wordpress的安裝很是簡單,5分鐘安裝教程。

環境:Linux+Apache+MySQL+PHP(lamp環境)

說明:演示環境爲ubuntu16.04,centos7及其以上與此大同小異

安裝步驟:

 

(1)   安裝apache

安裝命令:apt-get install apache2

(2)   安裝MySQL

安裝命令:apt-get install mysql-server mysql-client

(3)   安裝PHP

    

a.安裝命令:

apt-get install php7.0

apt-get install libapache2-mod-php7.0 

apt-get install php7.0-mysql

b.編輯文件

             vim /var/www/html/phpinfo.php 

               內容爲: <?php echo phpinfo();?>

 

b.重啓服務並在瀏覽器輸入對應的地址

service apache2 restart

service mysql restart

瀏覽器輸入:http:// IP地址/phpinfo.php,出現PHP版本界面

這樣就表示apache+php是沒有問題的

 

 

(4)   安裝PHPMyAdmin

 a.安裝命令

sudo apt-get install phpmyadmin

安裝時:空格選擇apache2,enter肯定,下一步配置數據庫,輸入密碼。

b.軟連接關聯

sudo ln -s /usr/share/phpmyadmin /var/www/html

c.啓用Apache mod_rewrite模塊,後面修改wordpress連接會用到

sudo a2enmod rewrite 

d.重啓服務

service php7.0-fpm restart

 

e.配置vim /etc/apache2/apache2.conf

 

配置文件尾部添加以下內容:

AddType application/x-httpd-php .php .htm .html 
 
AddDefaultCharset UTF-8
 
          說明:這裏安裝phpmyadmin的目的是便於經過web界面添加對應的數據庫和增長用戶賦予權限
           不安裝phpmyadmin也是能夠的。不安裝經過以下步驟也能夠完成這個目的。
            
           步驟以下:
# 登陸數據庫
mysql -u root -p
# 建立數據庫
CREATE DATABASE wordpress;
# 建立數據庫用戶和密碼
CREATE USER wordpressuser@localhost IDENTIFIED BY '123456';
# 設置wordpressuser訪問wordpress數據庫權限
GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost IDENTIFIED BY '123456';
# 刷新數據庫設置
FLUSH PRIVILEGES;
# 退出數據庫
exit
 

 

(1)   安裝WordPress

Wordpress中文版路徑爲: https://cn.wordpress.org/wordpress-4.8-zh_CN.zip

                英文版路徑: http://wordpress.org/latest.tar.gz

a.下載

wget +url便可

例如:wget  https://cn.wordpress.org/wordpress-4.8-zh_CN.zip

 

b.解壓

unzip latest.tar.gz或unzip wordpress-4.8-zh_CN.zip

 

 

c.遠程批量傳輸

sudo rsync -avP /home/test/wordpress /var/www/html/wordpress/

 

d.修改配置

cd /var/www/html/wordpress

cp wp-config-sample.php wp-config.php

vim wp-config.php

修改內容以下:將其修改成經過phpmyadmin添加的數據庫名和用戶名及其密碼或者是經過命令行添加的數據庫名和用戶名及其密碼。

 

說明:這裏的數據庫wordpress,將到時生成對應的11張表。

 

連接可參考: https://jingyan.baidu.com/article/215817f7b865121edb142365.html

 

 

2、  WordPress主題

 

1.主題架構圖

上述架構圖是許多模板主題共同的地方

 

 

 

 

 

2.主題模板zip包

一般主題模板是以zip包的形式存在,解壓後以下所示:

 

 

從文件名字咱們也能夠推斷出其大體做用,就這個主題而言,從上至下,它們的做用分別是:

  • css(文件夾):存放 css 文件
  • genericons(文件夾):存放字體文件
  • inc(文件夾):存放 php 文件,文件內通常是自定義函數
  • js(文件夾):存放 js 文件
  • languages(文件夾):存放語言文件
  • template-parts(文件夾):爲了代碼簡潔,做者把一些代碼(可能重複用到的)分開放到了此文件夾下
  • 404.php:出現404錯誤時使用的文件
  • archive.php:分類頁面
  • comments.php:評論
  • footer.php:頁腳
  • functions.php:定義函數
  • header.php:頁頭
  • image.php:圖片
  • index.php:首頁
  • page.php:頁面(page
  • rtl.css:關於字體的一些樣式
  • screenshot.php:主題縮略圖,在後臺顯示
  • search.php:搜索頁面
  • searchform.php:搜索框
  • sidebar.php:側邊欄
  • sidebar-content-bottom.php:側邊欄底部
  • single.php:文章(post)頁面
  • style.css:樣式文件

 

 

文件執行順序:

以主頁爲例,下面有2個文件 home.php 和 index.php,WordPress 程序會從你的主題文件夾中依次查找這兩個文件(後臺設置首頁顯示爲」最新文章」的前提下):

  • 若是找到 home.php,則使用 home.php 做爲博客首頁模板,即便你的主題文件夾中有 index.php;
  • 若是 home.php 未找到,則使用 index.php 做爲首頁模板;
  • 若是 home.php 和 index.php 都找不到,你的主題將不會被 WordPress 識別,等於廢物。

 

 

 

 

 

3.主題上傳或者下載

主題官方下載地址: https://wordpress.org/themes/

主題上傳和下載,下載能夠就近原則,經過點擊後臺主菜單外觀,進入主題界面,點擊添加主題,可經過搜索最近熱門或者最新的模板。點擊下載便可。不過有一個前提須要經過ftp服務器,遵照文件上傳協議,固然也能夠經過修改配置文件的方式解決下載主題和插件須要ftp服務器問題。要麼ftp,要麼服務器配置,主要是指對wp-config.php文件進行修改,否則沒法完成下載安裝到wp-content下的themes目錄下。

 

 

4.主題對於Java開發的啓示

經過架構圖和zip包,簡單的概述,與freemarke或者volocity等模板引擎有不謀而合之理,freemarke和volocity是經過事先定義ftl或vm的模板,而後經過前臺的配置進行代碼生成和頁面生成。包括wordpress新增頁面或者發佈文章等也是同樣,能夠經過自定義頁面進行頁面生成和套用主題文章展現模板。

主題就比如模板,面向模板機制開發或套用模板開發。

 

3、WordPress插件

1.如何下載和安裝插件

下載和安裝插件很是簡單以下圖所示:

 

和上傳主題及其下載主題是同樣的,都是經過這種安裝或者上傳zip包的形式。

插件下載官方地址爲: https://wordpress.org/plugins/

 

 

Wordpress的插件成千上萬,近年來,wordpress不僅是在博客領域有不少成就,並且在新聞、電商方面也有不少應用,若是沒有插件的話,wordpress功能只是單一的,有了插件就意味着有了無限應用可能。

 

 

2.如何使用插件

 

 

 

使用插件前,首先必先安裝,即擁有該插件,而後點擊插件菜單,進入插件列表,可根據本身的需求,決定啓動哪一個插件。

不一樣的插件,有不一樣的使用方法和應用場景,以WordPress導入工具爲例:

 

 

經過這種方式,你能夠將只要在任何博客系統上的導出對應的xml文件進行導入,你即可以獲取該博客對應的全部文章內容相關的信息。一般狀況下,適用於wordpress相關的。由於數據庫方面設計,即使能夠將其餘博客系統上的文件導入進來,可是表相關的數據可能會丟失或者在導入的時候會失敗。

 

 

3.插件開發帶來的好處和弊端

插件開發帶來的實現不少東西的可能性,同時也伴隨着許多弊端, 好比性能上,一個wordpress運行插件過多,會致使性能損失,性能損失最大的體現是網站運行過慢,過慢帶來的就是用戶點擊進入這個網站須要加載很長時間,加載過長影響用戶體驗,對於以網上寫做爲生或者是其餘傳播媒介,會形成很是很差的影響,致使用戶丟失。固然了,插件還有一個很大的隱患就是病毒潛伏。Wordpress對於xss攻擊或者其餘web攻擊都具備很是良好的防護性,讓對方沒有可趁之機,可是插件是近年來出現問題最多的地方。利與弊同時兼之。

 

4.插件開發對於Java開發有何啓示

插件於Java而言就比如maven庫的jar包,插件有千千萬萬,jar包一樣如此,每一個插件具備不一樣或者類似的功能,jar包也是如此。不一樣的jar包具備不一樣的功能,好比以hutool爲例,hutool這個jar包主要包含java開發所經常使用的工具類,這樣對於開發者而言,一般經常使用的加密、日期格式、類型轉換、計算、json、I/O等不用本身開發,只需一個依賴便可。而wordpress要想好比第三方微信登陸或者支付相關的等,須要安裝對應的插件,wordpress又號稱插件式開發。wordpress的插件比如maven的依賴,插件能夠由專業人員開發,想使用者可進行支付相關費用,而maven有個叫nexus,又叫maven私服。私服,顧名思義,私人倉庫,一般做爲公司maven倉庫。對外提供相關私服路徑,須要引用,除了引用私服的路徑以外,再加上依賴名稱。以下圖所示:

 

 

私服方面,能夠經過配置本身的倉庫賦予對應的角色,可達到保護源代碼不被查看的效果。Jeesite就是採用這種策略保護本身的核心代碼。

Jeecg的開發思路與wordpress有一個共同之處就是插件式開發

 

Jeecg的插件:

 

 

 

而該插件實質就是maven依賴,就是各類jar包的集合體。

這種思路能夠做爲借鑑的地方,仍是以jeecg爲例:

首先jeecg的碼雲地址爲: https://gitee.com/jeecg

 

上述截圖爲其開源項目,每一個開源項目都是以maven依賴形式存在。

若是要使用,仍是跟平時開發使用spring系列那樣,引用對應的依賴名稱和版本號便可。若是是私服須要引用私服地址,若是是公共倉庫,只需以下所示便可:

<dependency>  
    <groupId>org.jeewx</groupId>  
    <artifactId>jeewx-api</artifactId>  
    <version>1.2.0</version>  
</dependency>

 

4、  WordPress數據庫

數據庫架構圖

參考爲官方文檔地址: https://codex.wordpress.org/File:WP4.4.2-ERD.png

 

一共爲11個表:

wp_commentmeta:存儲評論的元數據
wp_comments:存儲評論
wp_links:存儲友情連接(Blogroll)
wp_options:存儲WordPress系統選項和插件、主題配置
wp_postmeta:存儲文章(包括頁面、上傳文件、修訂)的元數據
wp_posts:存儲文章(包括頁面、上傳文件、修訂)
wp_terms:存儲每一個目錄、標籤

wp_term_relationships:存儲每一個文章、連接和對應分類的關係
wp_term_taxonomy:存儲每一個目錄、標籤所對應的分類
wp_usermeta:存儲用戶的元數據
wp_users:存儲用戶

 

表的做用以下:

 

簡要概述:表與平時咱們本身設計的其實差異不是特別大,表的設計關係到數據庫的I/O及其CPU使用狀況,I/O和CPU使用率太高會致使數據庫處理數據緩慢,嚴重甚至卡死。而wordpress表結構設計也稱不上很是合理。

 

  5、WordPress工做原理

原理示意圖:

 

根據原理示意圖分析結果以下:

第一步:加載index.php

該文件有效源碼以下:

define('WP_USE_THEMES', true);

# 定義是否加載主題文件,true爲加載;

require('./wp-blog-header.php');

# 加載wp-blog-header.php文件,該文件用於啓動WordPress環境及模板;



第二步:加載wp-blog-header.php文件。

if ( !isset($wp_did_header) ) {

     $wp_did_header = true;
     require_once( dirname(__FILE__) . '/wp-load.php' );
     wp();
     require_once( ABSPATH . WPINC . '/template-loader.php' );
}

解析1:對$wp_did_header進行賦值,這樣若是代碼塊已經執行過,判斷就會失敗,代碼塊就不會再執行。這種作法能夠確保wp-blog-header.php文件只執行一次(重複執行的話會出現函數名衝突、變量重置等,WordPress會精神分裂的!);

解析2:加載WP根目錄下wp-load.php文件,執行初始化工做,如初始化常量、環境、加載類庫和核心代碼等完成WordPress環境啓動工做,如加載wp-includes目錄下functions.php(函數庫)、class-wp.php(類庫)、plugin.php(插件)、pomo目錄(語言包)、query.php(數據請求)、theme.php(加載主題文件)、post-template.php(文章模板)、comment.php(評論模板)、rewrite.php(URL重寫)等等。

解析3:執行wp()函數,執行內容處理工做,如根據用戶的請求調用相關函數獲取和處理數據,爲前端展現準備數據;

解析4:加載根目錄絕對路徑下wp-includes目錄中template-loader.php文件,執行主題應用工做,如根據用戶的請求加載主題模板。

WordPress之因此能將用戶請求的頁面生成出來,都是最後這三行核心代碼起的做用。wp-load.php會完成頁面生成所須要的全部環境、變量、API等,至關於作了好準備工做;wp()函數根據用戶請求的URL從數據庫中取出相應的數據內容備用;template-loader.php把已經準備好的內容用主題所設定的樣式展示方式給拼接出來。這三項工做完成,就能夠將用戶請求的頁面展示出來了。咱們姑且將這三項工做也認定爲三個大步驟,如下將重點分析。

 

 

第三步:加載wp-load.php文件(初始化)

該文件初始化常量(如:定義絕對路徑、設定功能文件及內容文件路徑等)並加載wp-config.php文件,

       加載wp-config.php文件:該文件主要用於配置MySQL數據庫通訊信息、設定數據庫表名前綴、設定密鑰、設置語言及文件絕對路徑等,部分核心代碼以下(爲省事就直接在代碼後加#而後解釋含義了)
       wp-config中還加載了一個重要的文件:wp-settings.php。

wp-settings.php:主要用於建立和定義常見變量、函數和類的庫來爲WordPress運行作準備,也就是說WordPress運行過程當中使用的大多數變量、函數和類等核心代碼都是在這個文件中定義的。這個文件至關於一個總控制器,不少常量定義、函數定義等都是在其餘文件中完成,而該文件的做用就是執行那些文件或執行在那些文件中已經定義好的函數。

 

 

 

第四步: 執行wp()函數(內容處理)

在這一階段,調用wp()函數對數據庫內容進行查詢,並將查詢的內容賦值給一些全局變量,方便在模板中使用模板標籤獲取相應的數據並展現在前端。

 



第五步:加載template-loader.php文件(主題應用)

示意圖以下:

 

 

 小結:

雖然如今的博客系統搭建方式有不少種,同時也不得不認可一點,後進者的確比前行者要強,可是有一點不可忽略,那就是站在巨人的肩上,正如當初的牛頓建立了力學三大定律,絕非他一個的功勞而是他善於利用先輩們積累的知識。

相關文章
相關標籤/搜索