WordPress高級指南:創(chuàng)建和管理自定義數(shù)據(jù)庫表

首先,尋找創(chuàng)建自定義數(shù)據(jù)庫表必需資源的秘密路徑。通過一步一個腳印的指導(dǎo),我相信,你將學(xué)會如何一步步構(gòu)建這些表。最后,我們將探討如何與這些新創(chuàng)建的數(shù)據(jù)庫表進(jìn)行有效的交互,確保你能夠順利地管理和使用這些數(shù)據(jù)。整個過程都會完整走完,無論你是初學(xué)者還是有一定基礎(chǔ)的開發(fā)者,都能從中獲得寶貴的知識和技能。

為什么要創(chuàng)建自定義數(shù)據(jù)庫表?

WordPress 的默認(rèn)數(shù)據(jù)庫架構(gòu)幾乎可以滿足所有類型的內(nèi)容需求。通過注冊自定義帖子類型和利用帖子元數(shù)據(jù),我們可以輕松處理大部分?jǐn)?shù)據(jù)需求。

圖片[1]-WordPress高級指南:創(chuàng)建和管理自定義數(shù)據(jù)庫表-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

然而,有時候我們遇到一些特殊情況,標(biāo)準(zhǔn)的架構(gòu)就顯得不夠用了。

拿電子商務(wù)網(wǎng)站來說,對于產(chǎn)品來講,自定義帖子類型就很合適,因為產(chǎn)品頁面需要的標(biāo)題、圖片和詳細(xì)描述等信息,和普通帖子差不多。如果需要額外的信息,也可以通過帖子的元數(shù)據(jù)來添加。

但訂單的情況就不一樣了,訂單包含的信息和普通帖子大相徑庭,所以把訂單信息放在一個自定義的數(shù)據(jù)庫表中會更合適。

簡而言之,當(dāng)你需要處理一些不適合放在默認(rèn)數(shù)據(jù)庫架構(gòu)中的數(shù)據(jù)時,創(chuàng)建一個自己的自定義數(shù)據(jù)庫表是個不錯的選擇。

哪里可以找到信息

雖然 WordPress 開發(fā)人員文檔不包含有關(guān)自定義數(shù)據(jù)庫表的任何內(nèi)容,但有一個名為 Codex 的舊版本開發(fā)人員文檔包含了這些內(nèi)容。你可以在Codex 的使用插件創(chuàng)建表頁面中找到有關(guān)自定義數(shù)據(jù)庫表的所有信息。

創(chuàng)建自定義數(shù)據(jù)庫表

圖片[2]-WordPress高級指南:創(chuàng)建和管理自定義數(shù)據(jù)庫表-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

你會注意到的第一件事是,這通常是在插件中完成的。

此外,可以并建議在激活插件時使用函數(shù)創(chuàng)建自定義register_activation_hook 

這允許此功能運行一次,而不是每次加載插件時運行。

創(chuàng)建表

要創(chuàng)建插件激活的自定義表,你需要使用一些東西。

首先,創(chuàng)建一個函數(shù)來管理表的創(chuàng)建:

function wp_learn_create_database_table() {
}

然后,你需要使用$wpdb全局WordPress 數(shù)據(jù)庫對象,因為它包含與數(shù)據(jù)庫交互所需的所有方法。

這將允許你使用 WordPress 數(shù)據(jù)庫前綴設(shè)置新的表名稱。

function wp_learn_create_database_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'custom_table';
}

它還允許你訪問該get_charset_collate方法,該方法將返回數(shù)據(jù)庫的正確字符集和排序規(guī)則。

    $charset_collate = $wpdb->get_charset_collate();

要創(chuàng)建表,你需要了解 SQL 以在數(shù)據(jù)庫上執(zhí)行 SQL 語句。這是通過dbDelta?函數(shù)完成的。dbDelta如果需要更新或更改默認(rèn) WordPress 表,則該功能通常在 WordPress 更新期間使用。它檢查當(dāng)前的表結(jié)構(gòu),將其與所需的表結(jié)構(gòu)進(jìn)行比較,并根據(jù)需要添加或修改表。

圖片[3]-WordPress高級指南:創(chuàng)建和管理自定義數(shù)據(jù)庫表-光子波動網(wǎng) | 專業(yè)WordPress修復(fù)服務(wù),全球范圍,快速響應(yīng)

為了使用dbDelta,你需要以特定的方式編寫 SQL 語句。

您可以在Codex頁面的創(chuàng)建或更新表格部分了解有關(guān)這些要求的更多信息。

創(chuàng)建 SQL 語句后,需要將其傳遞給函數(shù)dbDelta。這是通過包含wp-admin/includes/upgrade.php包含函數(shù)聲明的文件來完成的。

function wp_learn_create_database_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'custom_table';

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
        name tinytext NOT NULL,
        text text NOT NULL,
        url varchar(55) DEFAULT '' NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once ABSPATH . 'wp-admin/includes/upgrade.php';
    dbDelta( $sql );
}

在此示例中,正在創(chuàng)建一個名為 的新表custom_table。它有 5 個字段: an id、 a time、 a name、 atext和 a url。是id自動遞增整數(shù)、是time日期時間字段、是nametinytext 字段、是text文本字段、url是varchar 字段。這id是主鍵。

將此函數(shù)掛接到你的插件激活掛鉤中將確保在激活插件時創(chuàng)建該表。

register_activation_hook( __FILE__, 'wp_learn_create_database_table' );

插入數(shù)據(jù)

還可以使用插件激活掛鉤在插件激活時將數(shù)據(jù)插入表中。

為此,你可以使用對象insert的方法$wpdb,傳遞要插入的字段名稱和值的數(shù)組。

下面是一個示例。

register_activation_hook( __FILE__, 'wp_learn_insert_record_into_table' );
function wp_learn_insert_record_into_table(){
    global $wpdb;

    $table_name = $wpdb->prefix . 'custom_table';

    $wpdb->insert(
        $table_name,
        array(
            'time' => current_time( 'mysql' ),
            'name' => 'John Doe',
            'text' => 'Hello World!',
            'url'  => 'https://wordpress.org'
        )
    );
}

更新數(shù)據(jù)

要更新自定義表中的數(shù)據(jù),請使用update該對象的方法$wpdb,傳遞要更新的字段名稱和值的數(shù)組,以及用于查找要更新的記錄的字段名稱和值的數(shù)組。

function wp_learn_update_record_in_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'custom_table';

    $wpdb->update(
        $table_name,
        array(
            'time' => current_time( 'mysql' ),
            'name' => 'Jane Doe',
            'text' => 'Hello Planet!',
            'url'  => 'https://wordpress.org'
        ),
        array( 'id' => 1 )
    );
}

在此示例中,id 為 1 的記錄將更新為新值。

選擇數(shù)據(jù)

使用對象get_results的方法從自定義表中選擇數(shù)據(jù)$wpdb。get_results將接受有效的 SELECT SQL 語句。

function wp_learn_select_records_from_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'custom_table';

    $results = $wpdb->get_results( "SELECT * FROM $table_name" );

    foreach ( $results as $result ) {
        echo $result->name . ' ' . $result->text . '<br>';
    }
}

默認(rèn)情況下,get_results 將返回一個對象數(shù)組,你可以循環(huán)遍歷該數(shù)組并將行字段作為屬性訪問。

打掃干凈

也可以刪除您的自定義表格。為此,你可以使用query該對象的方法$wpdb,傳遞一條 SQL 語句來刪除該表。

function wp_learn_delete_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'custom_table';

    $wpdb->query( "DROP TABLE IF EXISTS $table_name" );
}

query方法將運行任何有效的 SQL 查詢,但最好僅將其用于不插入或更新數(shù)據(jù)的查詢,因為此函數(shù)不執(zhí)行任何查詢清理。

根據(jù)你的要求或插件用戶的要求,你可以通過兩種方式刪除表。

如果你的插件的用戶在停用插件后不需要此表中的數(shù)據(jù),你可以在插件停用掛鉤上觸發(fā)此操作。

register_deactivation_hook( __FILE__, 'wp_learn_delete_table' );

但是,如果該表中的數(shù)據(jù)很重要,并且你的用戶可能希望保留它,即使插件已停用,你也可以使用插件可用的兩種卸載方法之一刪除該表。

例如,如果你選擇使用register_uninstall_hook.

register_uninstall_hook( __FILE__, 'wp_learn_delete_table');

或者,你可以將表保持原樣,讓用戶決定如何處理它。

通常建議在卸載插件時與你的用戶確認(rèn)是否要保留該表,然后使用其中一種卸載方法。

結(jié)論

這篇教程只是帶你快速了解了自定義表的基礎(chǔ)知識。在未來的教程里,我們將深入探討如何在真實項目中應(yīng)用這些技巧。


聯(lián)系我們
教程看不懂?聯(lián)系我們?yōu)槟赓M解答!免費助力個人,小企站點!
客服微信
客服微信
電話:020-2206-9892
QQ咨詢:1025174874
郵件:info@361sale.com
工作時間:周一至周五,9:30-18:30,節(jié)假日休息
? 轉(zhuǎn)載聲明
本文作者:Harry
THE END
喜歡就支持一下吧
點贊0 分享
評論 搶沙發(fā)

請登錄后發(fā)表評論

    暫無評論內(nèi)容