我应该把我的create_new_table函数()放在哪里?

时间:2020-06-30 作者:Vera K

我应该把这个函数放在哪里为我的Wordpress站点创建一个新表?我目前正在将其放入wp\\U内容/主题/主题/功能中。php文件,但我不确定这是正确的位置,因为保存后我在phpMyAdmin中没有看到它。

这是功能:

function mental_health_providers_create_db() {
 global $wpdb;
 $charset_collate = $wpdb->get_charset_collate();
 require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );

 //* Create the table
 $table_name = $wpdb->prefix . \'mental_health_providers\';
 $sql = "CREATE TABLE $table_name (
 provider_id INTEGER NOT NULL AUTO_INCREMENT,
 provider_name TEXT NOT NULL,
 provider_city TEXT NOT NULL,
 provider_phone TEXT NOT NULL,
 PRIMARY KEY (provider_id)
 ) $charset_collate;";
 dbDelta( $sql );
}
register_activation_hook( __FILE__, \'mental_health_providers_create_db\' );

1 个回复
SO网友:Sabbir Hasan

当前用作插件的代码。register_activation_hook 仅为插件使用而保留。它仅在插件处于激活状态时激发。如果要从主题创建数据库表,可以使用after_switch_theme. 它可以像下面这样使用:

add_action("after_switch_theme", "mental_health_providers_create_db");
function mental_health_providers_create_db() {
    global $wpdb;
    $charset_collate = $wpdb->get_charset_collate();
    require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );

    //* Create the table
    $table_name = $wpdb->prefix . \'mental_health_providers\';
    $sql = "CREATE TABLE $table_name (
    provider_id INTEGER NOT NULL AUTO_INCREMENT,
    provider_name TEXT NOT NULL,
    provider_city TEXT NOT NULL,
    provider_phone TEXT NOT NULL,
    PRIMARY KEY (provider_id)
    ) $charset_collate;";
    dbDelta( $sql );
}
我再次建议您编写一个简单的插件来处理数据库创建部分。Read here 关于如何编写简单插件

相关推荐

$wpdb selects wrong database

我在另一个WordPress网站的文件夹中创建了一个新的WordPress网站。示例-主站点。com-mainsite。com/第二站点我创建了一个插件,并使用$wpdb 将数据插入数据库,插件将数据插入第一个/父站点的数据库。我使用的代码包括$wpdb 如下所示:$path = $_SERVER[\'DOCUMENT_ROOT\']; include $path . \'/wp-load.php\'; include $path . \'/wp-config.php\'; inc