首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Php -开发Wordpress插件

Php -开发Wordpress插件
EN

Stack Overflow用户
提问于 2014-12-25 02:00:19
回答 2查看 176关注 0票数 0

我正在开发我的第一个Wordpress插件,就目前而言,它应该做的就是:

  1. 安装时:创建表。

我的守则:

代码语言:javascript
运行
复制
if ( ! class_exists ( 'My_Plugin' ) )
{
class My_Plugin
{
    /**
     * Construct the plugin object
    **/
    public function __construct ()
    {
        // register actions
    }

    /**
     * Activate the plugin
    **/
    public static function activate ()
    {
        global $wpdb;

        $tableName = tableName ( $wpdb );

        if ( ! tableExists ( $wpdb , $tableName ) ) 
        {
            $sql = "CREATE TABLE " . $tableName . " (
                id INT(9) UNSIGNED NOT NULL AUTO_INCREMENT,
                any_column VARCHAR(255) NOT NULL,
                UNIQUE KEY id (id)
            );";

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

    /**
     * Deactivate the plugin
    **/     
    public static function deactivate ()
    {
        // Nothing
    }


    // Return table name
    public function tableName ( $wpdb , $tableName = 'new_table' )
    {
        $tableName = $wpdb->prefix . $tableName;
        return $tableName;
    }


    // Check if table already exists
    public function tableExists ( $wpdb , $tableName )
    {
        try
        {
            $result = $wpdb->query("SELECT 1 FROM $tableName LIMIT 1");
        } 
        catch ( Exception $e )
        {
            return FALSE;
        }

        return $result !== FALSE;
    }
}
}

if ( class_exists ( 'My_Plugin' ) )
{
    // Activation and Deactivation hooks
    register_activation_hook ( __FILE__ , array ( 'My_Plugin' , 'activate' ) );
    register_deactivation_hook ( __FILE__ , array ( 'My_Plugin' , 'deactivate' ) );

    // Instantiate the plugin class
    $plugin_template = new My_Plugin ();
}

但是返回此错误:

代码语言:javascript
运行
复制
Fatal error: Call to undefined function tableName() in /www/htdocs/path/to/file.php on line

但是我看不出我的错误,我真的不知道为什么这个函数是undefined...anybody可以帮我这个忙?

你好!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-25 02:09:14

tableName()不是全局函数,它是My_Plugin的一种方法。简单的方法是将activate()deactivate()转换为非静态函数,并使用$this->tableName().

代码语言:javascript
运行
复制
// Instantiate the plugin class
$plugin_template = new My_Plugin ();

register_activation_hook ( __FILE__ , array ( $plugin_template , 'activate' ) );
register_deactivation_hook ( __FILE__ , array ( $plugin_template , 'deactivate' ) );

代码语言:javascript
运行
复制
public function activate ()
{
    global $wpdb;

    $tableName = $this->tableName ( $wpdb );

    if ( ! $this->tableExists ( $wpdb , $tableName ) ) 
    {
        $sql = "CREATE TABLE " . $tableName . " (
            id INT(9) UNSIGNED NOT NULL AUTO_INCREMENT,
            any_column VARCHAR(255) NOT NULL,
            UNIQUE KEY id (id)
        );";

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

否则,您将需要在您的My_Plugin中构造一个新的activate()实例,然后通过它- $class->tableName()来访问它。

您可以查看手册以获得更多信息。

票数 2
EN

Stack Overflow用户

发布于 2014-12-25 04:25:11

插件激活中创建表的函数

register_activation_hook( __FILE__,'create_table‘);

function create_tabletag() { require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); $query="CREATE TABLE IF NOT EXISTS tab_list( tab_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(40), isvisible VARCHAR(20) )ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; dbDelta($query); //This function use to create table }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27643675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档