WP Custom 插件:创建表并插入数据一次。

发布于 2024-11-11 07:58:04 字数 824 浏览 0 评论 0原文

这是我完整的 Wordpress 插件文件:

<?php
function wp_create_table_install()
{
    global $wpdb;

    $table_name = $wpdb->prefix.'createtable';
    $sql = 'CREATE TABLE '.$table_name.'(
        id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(75)
    );';

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

function wp_create_table_insert_data()
{
    global $wpdb;

    $table_name = $wpdb->prefix.'createtable';
    $id = 1;
    $name = 'WP Create Table!';

    $wpdb->insert($table_name, array('id' => $id, 'name' => $name));
}

register_activation_hook(__FILE__, 'wp_create_table_install');
register_activation_hook(__FILE__, 'wp_create_table_insert_data');
?>

当我激活插件时,它总是尝试创建一个表并插入数据。我怎样才能做到一次,只是在第一次插件激活时?

谢谢。

This is my complete Wordpress plugin file:

<?php
function wp_create_table_install()
{
    global $wpdb;

    $table_name = $wpdb->prefix.'createtable';
    $sql = 'CREATE TABLE '.$table_name.'(
        id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(75)
    );';

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

function wp_create_table_insert_data()
{
    global $wpdb;

    $table_name = $wpdb->prefix.'createtable';
    $id = 1;
    $name = 'WP Create Table!';

    $wpdb->insert($table_name, array('id' => $id, 'name' => $name));
}

register_activation_hook(__FILE__, 'wp_create_table_install');
register_activation_hook(__FILE__, 'wp_create_table_insert_data');
?>

When I activate the plugin, it always tries to create a table and insert data. How could I do it once, just in the first plugin activation?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧街凉风 2024-11-18 07:58:04

更快的方法是在 CREATE 语句中添加 [IF NOT EXISTS],这样如果表已存在,就不会出现错误。

A quicker way would be to add [IF NOT EXISTS] in your CREATE statement so that you don't get an error if your table already exists.

爱情眠于流年 2024-11-18 07:58:04

在运行CREATE TABLE之前,您可以查询information_schema.tables来检查该表是否已存在。

Before running CREATE TABLE, you could query information_schema.tables to check to see whether or not the table already exists.

鸠魁 2024-11-18 07:58:04

不幸的是,没有办法在“安装”上运行某些东西 - 令人惊讶的是,WordPress 不提供任何用于安装而不是激活的挂钩!

人们处理这个问题的方法是设置并测试一个选项 - 如果未设置该选项,则创建表,如果设置了,则不执行任何操作或进行数据库升级。选项被读入并缓存,因此这样做不会造成性能损失。

$opt = get_option(MYPLUGIN_OPTIONS);

$opt['dbversion'] = 100;
...
update_option(MYPLUGIN_OPTIONS, $opt);

Unfortunately, there's no way to run something on "install" - surprisingly, WordPress doesn't provide any hooks for install as opposed to activation!

The way people cope with this is to set and test an option - if the option is not set, then create the tables, and if it is set do nothing or do a DB upgrade. Options are read in and cached so there is no performance penalty to doing this.

$opt = get_option(MYPLUGIN_OPTIONS);

$opt['dbversion'] = 100;
...
update_option(MYPLUGIN_OPTIONS, $opt);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文