WordPress高级指南:创建和管理自定义数据库表

首先,寻找创建自定义数据库表必需资源的秘密路径。通过一步一个脚印的指导,我相信,你将学会如何一步步构建这些表。最后,我们将探讨如何与这些新创建的数据库表进行有效的交互,确保你能够顺利地管理和使用这些数据。整个过程都会完整走完,无论你是初学者还是有一定基础的开发者,都能从中获得宝贵的知识和技能。

为什么要创建自定义数据库表?

WordPress 的默认数据库架构几乎可以满足所有类型的内容需求。通过注册自定义帖子类型和利用帖子元数据,我们可以轻松处理大部分数据需求。

图片[1]-WordPress高级指南:创建和管理自定义数据库表-光子波动网 | 专业WordPress修复服务,全球范围,快速响应

然而,有时候我们遇到一些特殊情况,标准的架构就显得不够用了。

拿电子商务网站来说,对于产品来讲,自定义帖子类型就很合适,因为产品页面需要的标题、图片和详细描述等信息,和普通帖子差不多。如果需要额外的信息,也可以通过帖子的元数据来添加。

但订单的情况就不一样了,订单包含的信息和普通帖子大相径庭,所以把订单信息放在一个自定义的数据库表中会更合适。

简而言之,当你需要处理一些不适合放在默认数据库架构中的数据时,创建一个自己的自定义数据库表是个不错的选择。

哪里可以找到信息

虽然 WordPress 开发人员文档不包含有关自定义数据库表的任何内容,但有一个名为 Codex 的旧版本开发人员文档包含了这些内容。你可以在Codex 的使用插件创建表页面中找到有关自定义数据库表的所有信息。

创建自定义数据库表

图片[2]-WordPress高级指南:创建和管理自定义数据库表-光子波动网 | 专业WordPress修复服务,全球范围,快速响应

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

此外,可以并建议在激活插件时使用函数创建自定义register_activation_hook 

这允许此功能运行一次,而不是每次加载插件时运行。

创建表

要创建插件激活的自定义表,你需要使用一些东西。

首先,创建一个函数来管理表的创建:

function wp_learn_create_database_table() {
}

然后,你需要使用$wpdb全局WordPress 数据库对象,因为它包含与数据库交互所需的所有方法。

这将允许你使用 WordPress 数据库前缀设置新的表名称。

function wp_learn_create_database_table() {
    global $wpdb;

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

它还允许你访问该get_charset_collate方法,该方法将返回数据库的正确字符集和排序规则。

    $charset_collate = $wpdb->get_charset_collate();

要创建表,你需要了解 SQL 以在数据库上执行 SQL 语句。这是通过dbDelta 函数完成的。dbDelta如果需要更新或更改默认 WordPress 表,则该功能通常在 WordPress 更新期间使用。它检查当前的表结构,将其与所需的表结构进行比较,并根据需要添加或修改表。

图片[3]-WordPress高级指南:创建和管理自定义数据库表-光子波动网 | 专业WordPress修复服务,全球范围,快速响应

为了使用dbDelta,你需要以特定的方式编写 SQL 语句。

您可以在Codex页面的创建或更新表格部分了解有关这些要求的更多信息。

创建 SQL 语句后,需要将其传递给函数dbDelta。这是通过包含wp-admin/includes/upgrade.php包含函数声明的文件来完成的。

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 );
}

在此示例中,正在创建一个名为 的新表custom_table。它有 5 个字段: an id、 a time、 a name、 atext和 a url。是id自动递增整数、是time日期时间字段、是nametinytext 字段、是text文本字段、url是varchar 字段。这id是主键。

将此函数挂接到你的插件激活挂钩中将确保在激活插件时创建该表。

register_activation_hook( __FILE__, 'wp_learn_create_database_table' );

插入数据

还可以使用插件激活挂钩在插件激活时将数据插入表中。

为此,你可以使用对象insert的方法$wpdb,传递要插入的字段名称和值的数组。

下面是一个示例。

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'
        )
    );
}

更新数据

要更新自定义表中的数据,请使用update该对象的方法$wpdb,传递要更新的字段名称和值的数组,以及用于查找要更新的记录的字段名称和值的数组。

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 的记录将更新为新值。

选择数据

使用对象get_results的方法从自定义表中选择数据$wpdbget_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>';
    }
}

默认情况下,get_results 将返回一个对象数组,你可以循环遍历该数组并将行字段作为属性访问。

打扫干净

也可以删除您的自定义表格。为此,你可以使用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 查询,但最好仅将其用于不插入或更新数据的查询,因为此函数不执行任何查询清理。

根据你的要求或插件用户的要求,你可以通过两种方式删除表。

如果你的插件的用户在停用插件后不需要此表中的数据,你可以在插件停用挂钩上触发此操作。

register_deactivation_hook( __FILE__, 'wp_learn_delete_table' );

但是,如果该表中的数据很重要,并且你的用户可能希望保留它,即使插件已停用,你也可以使用插件可用的两种卸载方法之一删除该表。

例如,如果你选择使用register_uninstall_hook.

register_uninstall_hook( __FILE__, 'wp_learn_delete_table');

或者,你可以将表保持原样,让用户决定如何处理它。

通常建议在卸载插件时与你的用户确认是否要保留该表,然后使用其中一种卸载方法。

结论

这篇教程只是带你快速了解了自定义表的基础知识。在未来的教程里,我们将深入探讨如何在真实项目中应用这些技巧。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容