如果是一個普通的使用者,不需要瞭解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