在Wordpress中激活插件时未创建表

时间:2018-06-21 05:56:25

标签: php wordpress

我正在尝试创建一个插件,该插件在激活后需要创建一个表。下面是我用来制作插件的代码。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="parts" multiple="multiple" class="parameterdropdown">
<optgroup value="9" label="B3_L1" datagroupid="9">
      <option value="12">A01_Process1_Sub1</option>
      <option value="14">A03_Process3_Sub1 </option>
 </optgroup>
<optgroup value="6" label="A2_L2" datagroupid="6">
      <option value="7">A01_Process1_Sub1</option>
      <option value="9">A03_Process3_Sub1 </option>
</optgroup>
 <optgroup value="3" label="A1_L1" datagroupid="3">
      <option value="3">A01_Process1_Sub1</option>
      <option value="4">A03_Process3_Sub1 </option>
</optgroup>
</select>

我在debug.log中找到了这个。在此debug.log中,SQL代码的第1行也在第3行中重复。原始代码的地方有所不同。

register_activation_hook( __FILE__, 'so_50960355_insert_page', 
'your_plugin_options_install' );
function so_50960355_insert_page(){
    // Define my page arguments
    $page = array(
        'post_title'   => 'Menu',
        'post_content' => 'Short Code',
        'post_status'  => 'publish',
        'post_author'  => get_current_user_id(),
        'post_type'    => 'page',
    );

    wp_insert_post( $page, '' );
}


// function to create the DB / Options / Defaults                   
function your_plugin_options_install() {
    global $wpdb;
    $your_db_name = $wpdb->prefix . 'table';
    global $your_db_name;

    // create the ECPT metabox database table
    if($wpdb->get_var("show tables like '$your_db_name'") != $your_db_name) 
    {
        $sql = "CREATE TABLE " . $your_db_name . " (
        `id` mediumint(9) NOT NULL AUTO_INCREMENT,
        `apikey` mediumtext NOT NULL,
        `locid` mediumtext NOT NULL,
        `appid` mediumtext NOT NULL,
        UNIQUE KEY id (id)
        );";

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

2 个答案:

答案 0 :(得分:2)

因为它是第三个参数,所以可能不触发该钩子。食品法典委员会说,它希望有一个回调。它似乎不允许一次> 1次​​回调。 参见https://codex.wordpress.org/Function_Reference/register_activation_hook 将代码更改为

register_activation_hook( __FILE__, 'so_50960355_insert_page');
register_activation_hook( __FILE__, 'your_plugin_options_install' ); 

答案 1 :(得分:0)

我发现问题出在我使用的Mysql版本。我正在尝试升级版本并在此处更新答案。