wordpress插件启用/停用功能无法触发

时间:2018-06-21 12:41:03

标签: php mysql wordpress

我必须为wordpress做一些目录插件,但是仅激活/停用它已经很麻烦。这是我的代码。它应该工作。该代码仅是用于激活/停用的测试代码,但是考虑到文档,它应该可以工作,而且似乎找不到合理的参数,为什么不触发。有人可以这么善良地看一下代码吗?预先感谢

<?php
register_activation_hook( __FILE__, 'plus8k_activate' );
register_deactivation_hook( __FILE__, 'plus8k_deactivate' );

function plus8k_activate()
{
    global $wpdb;

    $table_name = $wpdb->prefix . "plus8k_products"; 

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      name tinytext NOT NULL,
      description text NOT NULL,
      meta tinytext NOT NULL,
      content text NOT NULL,
      time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
      status bool DEFAULT 'true' NOT NULL,
      PRIMARY KEY  (id)
    ) $charset_collate;";

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

    $table_name = $wpdb->prefix . "plus8k_media";

    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      name tinytext NOT NULL,
      caption text NOT NULL,
      location tinytext NOT NULL,
      time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
      prod_id mediumint(9) NOT NULL,
      PRIMARY KEY  (id),
      FOREIGN KEY (prod_id)
        REFERENCES " . $wpdb->prefix . "plus8k_products(id) 
        ON DELETE CASCADE
    ) $charset_collate;";

    dbDelta( $sql );
}

function plus8k_deactivate()
{
    global $wpdb;

    $table_name = $wpdb->prefix . "plus8k_products"; 

    $charset_collate = $wpdb->get_charset_collate();

    $sql = "DROP TABLE $table_name";

    dbDelta( $sql );

    $table_name = $wpdb->prefix . "plus8k_media";

    $sql = "DROP TABLE $table_name";

    dbDelta( $sql );
}

例如,如果我删除函数并仅从plus8k_activate外部函数复制代码,则会创建表。我不知道为什么注册的钩子不触发plus8k_activate函数。

编辑!激活无效,因为sql中的错误(布尔默认值必须为1或0,它不能识别true / false)

现在可以激活工作,但是尽管sql没问题,但是不能取消激活,我已经使用phpmyadmin进行了尝试。需要弄清楚。

2 个答案:

答案 0 :(得分:1)

确保从插件的主文件(如sample-plugin/sample.php)中调用此函数。

或者尝试使用匿名函数回调,以确保您不会产生任何误解。

register_deactivation_hook(__FILE__, function () {
   //something here like
   die('today');
});

停用插件时,必须运行此代码。请从那里开始,在其中添加您的功能。

答案 1 :(得分:0)

您的代码对我来说还不错。 确保您的文件名与您的插件名称相同。例如。如果您的插件名为myplugin,则激活脚本必须位于wp-content/plugins/myplugin/myplugin.php

要删除表格,您不能使用dbDelta()-这只会创建或修改表格,而不能删除表格。

要删除表,您需要常规查询:

$table_name = $wpdb->prefix . "plus8k_products"; 
$sql = "DROP TABLE $table_name";
$wpdb->query($sql);