首先,寻找创建自定义数据库表必需资源的秘密路径。通过一步一个脚印的指导,我相信,你将学会如何一步步构建这些表。最后,我们将探讨如何与这些新创建的数据库表进行有效的交互,确保你能够顺利地管理和使用这些数据。整个过程都会完整走完,无论你是初学者还是有一定基础的开发者,都能从中获得宝贵的知识和技能。
为什么要创建自定义数据库表?
WordPress 的默认数据库架构几乎可以满足所有类型的内容需求。通过注册自定义帖子类型和利用帖子元数据,我们可以轻松处理大部分数据需求。
然而,有时候我们遇到一些特殊情况,标准的架构就显得不够用了。
拿电子商务网站来说,对于产品来讲,自定义帖子类型就很合适,因为产品页面需要的标题、图片和详细描述等信息,和普通帖子差不多。如果需要额外的信息,也可以通过帖子的元数据来添加。
但订单的情况就不一样了,订单包含的信息和普通帖子大相径庭,所以把订单信息放在一个自定义的数据库表中会更合适。
简而言之,当你需要处理一些不适合放在默认数据库架构中的数据时,创建一个自己的自定义数据库表是个不错的选择。
哪里可以找到信息
虽然 WordPress 开发人员文档不包含有关自定义数据库表的任何内容,但有一个名为 Codex 的旧版本开发人员文档包含了这些内容。你可以在Codex 的使用插件创建表页面中找到有关自定义数据库表的所有信息。
创建自定义数据库表
你会注意到的第一件事是,这通常是在插件中完成的。
此外,可以并建议在激活插件时使用函数创建自定义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 更新期间使用。它检查当前的表结构,将其与所需的表结构进行比较,并根据需要添加或修改表。
为了使用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
日期时间字段、是name
tinytext 字段、是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
的方法从自定义表中选择数据$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>';
}
}
默认情况下,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');
或者,你可以将表保持原样,让用户决定如何处理它。
通常建议在卸载插件时与你的用户确认是否要保留该表,然后使用其中一种卸载方法。
结论
这篇教程只是带你快速了解了自定义表的基础知识。在未来的教程里,我们将深入探讨如何在真实项目中应用这些技巧。
暂无评论内容