wordpress源碼解析-資料庫表結構(2)

來源:互聯網
上載者:User

如果是一個普通的使用者,不需要瞭解wordpress資料庫的結構。但是,如果你正在寫一個外掛程式,你應該會對wordpress如何處理它的資料和關係感興趣。如果你已經嘗試使用已經存在的wordpress api 去訪問你需要的資料,但不直接存取資料庫的情況下,這是不可能的,WordPress的提供WPDB的類,使這項任務變得簡單。

WordPress資料庫的11個資料表分別是:

表名(點擊表名查看詳細介紹)

描述
wp_commentmeta 文章評論額外資訊表
wp_comments 文章評論資訊表
wp_links 連結資訊表
wp_options 基本配置資訊表,通常通過get_option來操作,該表通常作為外掛程式儲存資料的一個地方。
wp_postmeta 文章額外資料表,例如文章瀏覽次數,文章的自訂欄位等都儲存在這裡。
wp_posts 文章資訊表,包括了日誌、附件、頁面等等資訊。是WordPress最重要的一個資料表。
wp_terms 文章分類、連結分類、標籤的資訊表。
wp_term_relationships 分類與文章資訊表(wp_posts)、連結資料表(wp_links)的關聯表。
wp_term_taxonomy 分類資訊表,區分wp_terms資訊的分類類型,有category、link_category和tag三種分類類型。
wp_usermeta 使用者額外資訊表
wp_users 使用者基本資料表。存放系統所有使用者基本資料。

WordPress資料庫表之間的關係是什麼呢?

要搞明白這個問題以及對WordPress資料表之間的關係有更加深刻的理解,讓我們先來想想WordPress部落格系統的功能,預設安裝的WordPress2.6.2版本部落格系統涉及的資料資訊主要包括了使用者資訊、分類資訊、連結資訊、文章資訊、文章評論資訊、基本配置資訊這6類資訊。

使用者資訊:系統中所有註冊使用者的帳號資訊。

分類資訊:包括了文章分類、連結分類、標籤這3中分類資訊。

連結資訊:就是部落格系統中的友情連結資訊。

文章資訊:部落格系統中的日誌、日誌產生的附件、頁面等資訊。

文章評論資訊:對具體日誌或者附件的評論資訊。

基本配置資訊:系統中的基本配置資訊,例如部落格名稱,部落格地址等等。

WordPress資料庫的11個資料表就是為了儲存以上6類資料資訊而設計,這些表之間的總體關係結構如所示:

從可以看出WordPress部落格系統6類資料資訊分別所涉及的資料表及關係如下表所示:

資訊類型 涉及資料表及關聯關係
使用者資訊 資料表:wp_users、wp_usermeta,關聯關係:wp_users.ID->wp_usermeta.user_id
分類資訊 資料表:wp_terms、wp_term_taxonomy關聯關係:wp_terms.term_id->wp_term_taxonomy.term_id
連結資訊

資料表:wp_links、wp_term_relationships、wp_terms、wp_term_taxonomy、 wp_users、wp_usermeta關聯關係:

一,確定連結所屬分類 (1)wp_links.link_id->wp_term_relationships.object_id, (2)wp_term_relationships.term_taxonomy_id->wp_term_taxonomy.term_taxonomy_id
(該關係還要取決與wp_term_taxonomy表中的taxonomy分類類型為“link_category”) (3)wp_terms.term_id->wp_term_taxonom.term_id

二、確定連結所有者 (4)wp_links.link_owner->wp_users.ID(5)wp_users.ID->wp_usermeta.user_id

文章資訊

資料表:wp_posts、wp_postmeta、wp_comments、wp_term_relationships、wp_terms、 wp_term_taxonomy、wp_users、wp_usermeta關聯關係:一、確定文章資訊 (1)wp_posts.ID->wp_postsmeta.post_id

二、確定文章評論 (2)wp_posts.ID->wp_comments.comment_post_id

三、確定文章評論的作者 (3)wp_comments.comment_author->wp_users.ID

(4)wp_users.ID->wp_usermeta.user_id

四、確定文章所屬分類

(5)wp_posts.ID->wp_term_relationships.object_id,

(6)wp_term_relationships.term_taxonomy_id->wp_term_taxonomy.term_taxonomy_id
(該關係還要取決與wp_term_taxonomy表中的taxonomy分類類型為“category”或者“tag”)

(7)wp_terms->term_id->wp_term_taxonomy

五、確定文章作者

(8)wp_posts.author->wp_users.ID;

(9)wp_users.ID->wp_usermeta.user_id

文章評論資訊 資料表:wp_comments、wp_posts、wp_users、wp_usermeta關聯關係:
一、確定評論的文章 (1)wp_comments.comment_post_id->wp_posts.ID
二、確定評論的作者 (2)wp_comments.comment_author->wp_users.ID(3)wp_users.ID->wp_usermeta.user_id
基本配置資訊 資料表:wp_options沒有關聯關係

 

Wp-config.php中關於資料庫的設定。

     <?php      /*wp-config.php */            // ** MySQL 設定 - 具體資訊來自您正在使用的主機 ** //      /** WordPress 資料庫的名稱 */      define('DB_NAME', SAE_MYSQL_DB);            /** MySQL 資料庫使用者名稱 */      define('DB_USER', SAE_MYSQL_USER);            /** MySQL 資料庫密碼 */      define('DB_PASSWORD', SAE_MYSQL_PASS);            /** MySQL 主機 */      define('DB_HOST', SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT);            /** 建立資料表時預設的文字編碼 */      define('DB_CHARSET', 'utf8');            /** 資料庫清理類型。如不確定請勿更改 */      define('DB_COLLATE', '');            define('WP_USE_MULTIPLE_DB', true);            $db_list = array(              'write'=> array(                  array(                      'db_host' => SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,                      'db_user'=> SAE_MYSQL_USER,                      'db_password'=> SAE_MYSQL_PASS,                      'db_name'=> SAE_MYSQL_DB,                      'db_charset'=> 'utf8'                      )                  ),              'read'=> array(                  array(                      'db_host' => SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,                      'db_user'=> SAE_MYSQL_USER,                      'db_password'=> SAE_MYSQL_PASS,                      'db_name'=> SAE_MYSQL_DB,                      'db_charset'=> 'utf8'                      )                  ),              );      $global_db_list = $db_list['write'];            /**#@+      * 身份密匙設定。      *      * 您可以隨意寫一些字元      * 或者直接存取 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私密金鑰產生服務},      * 任何修改都會導致 cookie 失效,所有使用者必須重新登入。      *      * @since 2.6.0      */      define('AUTH_KEY',         hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_KEY', SAE_SECRETKEY ));      define('SECURE_AUTH_KEY',  hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_KEY', SAE_SECRETKEY ));      define('LOGGED_IN_KEY',    hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_KEY', SAE_SECRETKEY ));      define('NONCE_KEY',        hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_KEY', SAE_SECRETKEY ));      define('AUTH_SALT',        hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_SALT', SAE_SECRETKEY ));      define('SECURE_AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_SALT', SAE_SECRETKEY ));      define('LOGGED_IN_SALT',   hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_SALT', SAE_SECRETKEY ));      define('NONCE_SALT',       hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_SALT', SAE_SECRETKEY ));            /**#@-*/            /**      * WordPress 資料表首碼。      *      * 如果您有在同一資料庫內安裝多個 WordPress 的需求,請為每個 WordPress 設定不同的資料表首碼。      * 首碼名只能為數字、字母加底線。      */      $table_prefix  = 'wp_';            /**      * WordPress 語言設定,預設為英語。      *      * 本項設定能夠讓 WordPress 顯示您需要的語言。      * wp-content/languages 內應放置同名的 .mo 語言檔案。      * 要使用 WordPress 簡體中文介面,只需填入 zh_CN。      */      define ('WPLANG', 'zh_CN');            /**      * 開發人員專用:WordPress 偵錯模式。      *      * 將這個值改為“true”,WordPress 將顯示所有開發過程中的提示。      * 強烈建議外掛程式開發人員在開發環境中啟用本功能。      */      define('WP_DEBUG', false);            /* 好了!請不要再繼續編輯。請儲存該檔案。 */            /** WordPress 目錄的絕對路徑。 */      if ( !defined('ABSPATH') )          define('ABSPATH', dirname(__FILE__) . '/');            /** 設定 WordPress 變數和包含檔案。 這個檔案內容很多啊,分析較困難*/      require_once(ABSPATH . 'wp-settings.php');  

wp-db.php 包含一個wpdb的類,是資料庫操作API 。產生一個$wpdb的全域變數,是wpdb類的一個對象。挺長的,貼在文章裡太臃腫了。

參考:

http://wenku.baidu.com/view/6448da5bbe23482fb4da4c94.html?from_page=view&from_mod=download

http://codex.wordpress.org/Database_Description

http://codex.wordpress.org/Function_Reference/wpdb_Class

http://www.jakc.net/post/272

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.