Плагин WP Custom: создайте таблицу и вставьте данные один раз. - PullRequest
1 голос
/ 29 мая 2011

Это мой полный файл плагина 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');
?>

Когда я активирую плагин, он всегда пытается создать таблицу и вставить данные.Как я мог сделать это один раз, только при первой активации плагина?

Спасибо.

Ответы [ 3 ]

1 голос
/ 02 июня 2011

Более быстрым способом было бы добавить [ЕСЛИ НЕ СУЩЕСТВУЕТ] в ваш оператор CREATE, чтобы вы не получили ошибку, если ваша таблица уже существует.

0 голосов
/ 05 июля 2012

К сожалению, нет способа запустить что-то при «установке» - удивительно, WordPress не предоставляет никаких хуков для установки в отличие от активации!

Способ, которым люди справляются с этим, заключается в установке и тестированииопция - если опция не установлена, то создавать таблицы, а если она установлена, ничего не делать или обновлять БД.Опции считываются и кэшируются, поэтому это не снижает производительность.

$opt = get_option(MYPLUGIN_OPTIONS);

$opt['dbversion'] = 100;
...
update_option(MYPLUGIN_OPTIONS, $opt);
0 голосов
/ 29 мая 2011

Перед запуском CREATE TABLE вы можете запросить information_schema.tables, чтобы проверить, существует ли таблица.

...