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

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

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

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

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

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

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

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

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

哪里可以找到信息

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

创建自定义数据库表

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 更新期间使用。它检查当前的表结构,将其与所需的表结构进行比较,并根据需要添加或修改表。

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

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

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

结论

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


联系我们
文章看不懂?联系我们为您免费解答!免费助力个人,小企站点!
电话:020-2206-9892
QQ咨询:1025174874
邮件:info@361sale.com
工作时间:周一至周五,9:30-18:30,节假日休息
发布者:光子波动,转转请注明出处:https://www.361sale.com/6584/

(0)
上一篇 2024年 3月 28日 下午2:39
下一篇 2024年 3月 28日 下午3:40

相关推荐

  • 在WordPress网站上添加社交媒体图标的简易指南

    在网站上添加社交媒体图标很重要,因为它能帮助访客轻松地在他们常用的社交平台上找到并关注您。如果您的网站没有这些图标,比如在页脚或页眉,访客可能就找不到它们,这就好比您没有提供一种方法让人们在社交媒体上联系您一样,实在是不可思议! 在这篇文章里,我们会简单介绍社交媒体图标的重要性,并指导您如何把它们加到您的网站侧边栏、页眉或页脚。 在 WordPress 网站…

    2024年 3月 25日 WordPress自学建站
    0036
  • WordPress网站多语言设置详解

    想让你的WordPress网站支持多种语言吗? 目前,超过43%的互联网网站由WordPress支持,许多网站需要服务于多种语言的用户。 这篇文章将教你如何轻松地建立一个多语言的WordPress网站。我们会向你介绍三种不同的方法,这样你就可以挑选一个最适合自己需求的方案。 不论你选择哪种方法,你都能够方便地把你的WordPress文章、页面、标签、分类和主…

    2024年 3月 26日
    0050
  • wordprees网站的页面链接过长,怎么自定义链接内容?

    WordPress 是一个非常流行的网站建设平台,其具有非常强大的功能和灵活性,可以帮助用户快速创建高效的网站。在使用 WordPress 建站的过程中,如果网站的页面链接过长,这不仅不利于用户体验,还会降低网站的搜索引擎优化效果。因此,自定义链接内容和设置伪静态是非常重要的。下面是一个详细的教程,帮助您完成这些操作。 在 WordPress 中,自定义链接…

    2023年 3月 7日
    00477
  • WordPress 中的过滤器是什么?如何使用 WordPress add_filter ?

    什么是 WordPress 过滤器? WordPress 过滤器是一个钩子,可以在数据返回到数据库并显示给用户之前修改数据。因此,你可以自定义插件、主题或网站的功能,而无需更改 WordPress 核心文件。 例如,向所有网站帖子添加脚注或更改其摘录长度。有四种常见的过滤器钩子函数——add_filter、 remove_filter、has_filter和…

    2024年 4月 5日 WordPress自学建站
    1043
  • 宝塔面板 WordPress博客屏蔽大陆IP

    本指南详细介绍如何使用Nginx和宝塔面板屏蔽中国大陆IP,确保跨境电商网站安全并符合地区性网站访问政策。学习如何设置IP黑名单,自定义HTTP响应状态码(如403 Forbidden),以防止不希望的地区访问您的网站。 1,首先先在Nginx里添加屏蔽大陆IP的代码 登陆宝塔面板,找到软件商店,选择Nginx后面的设置,点开 打开设置,选择左侧 配置修改,…

    2天前 WordPress自学建站
    0040

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

020-2206-9892

QQ咨询:1025174874

邮件:info@361sale.com

工作时间:周一至周五,9:30-18:30,节假日休息

客服微信