安装/激活插件时如何创建数据库,删除插件时删除数据库

时间:2018-01-08 07:22:34

标签: php wordpress plugins

我正在尝试使用面向对象编程创建新的WordPress插件。我想在插件激活时创建数据库并在插件删除时删除数据库。下面是我的代码它不适用于我。我有两个文件,一个是主插件文件另一个是插件函数包含文件。

主文件代码如下:

// Global Variables (Manage Globally In Scope).
const body = document.querySelector('body') // Body.
let ygap = 0 // Y Offset.


// On Mount (Call When Mounting).
const onModalMount = () => {

  // Y Gap.
  ygap = window.pageYOffset || document.documentElement.scrollTop

  // Fix Body.
  body.style.position = 'fixed'

  // Apply Y Offset To Body Top.
  body.style.top = `${-ygap}px`

}


// On Dismount (Call When Dismounting).
const onModalDismount = () => {

  // Unfix Body.
  body.style.position = 'relative'

  // Reset Top Offset.
  body.style.top = '0'

  // Reset Scroll.
  window.scrollTo(0, ygap)

}

包括以下文件代码:

<?php
/* 
Plugin Name: Test Reviews1
Plugin URI: https://test.in/
Description: This Test Plugin. 
Version: 1.0 
Author: Test 
Author URI: https://test.in/ 
License: GPLv2 or later 

    */
    new test_plugin();
    class test_plugin{

        public function __construct(){

            $this->plugin_dir = plugins_url( '' , __FILE__ );
            include('inc/inc.php');
            $this->security = new hidemysite_security();



        }

    }

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

$wpdb->prefix此varibale未定义。这就是为什么在停用插件时不删除表的原因。

按照以下示例说明如何定义前缀变量:

//定义了一个函数

function cf_core_get_table_prefix() {
    global $wpdb;
    return $wpdb->base_prefix;
}

//如何使用上述功能

$table_prefix = cf_core_get_table_prefix();
$wpdb->query( "DROP TABLE {$table_prefix}md_things" );

定义你的激活功能

global $wpdb;
    $charset_collate = cf_core_set_charset();
    $table_prefix = cf_core_get_table_prefix();
    $sql[] ="CREATE TABLE {$table_prefix}cf_contact 
    (    id int(10) unsigned NOT NULL AUTO_INCREMENT,
          name VARCHAR( 60 ) NOT NULL,
          email VARCHAR( 60 ) NOT NULL,
          mob VARCHAR( 60 ) NOT NULL,
          msg VARCHAR( 60 ) NOT NULL,
              PRIMARY KEY (`id`)
              )
             {$charset_collate} AUTO_INCREMENT=1";

        dbDelta($sql);