首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wordpress插件激活/停用功能未触发

wordpress插件激活/停用功能未触发
EN

Stack Overflow用户
提问于 2018-06-21 20:41:03
回答 2查看 491关注 0票数 1

我必须为wordpress做一些目录插件,但我已经在激活/停用它方面遇到了麻烦。这是我的代码。应该能行得通。这段代码只是测试激活/停用的代码,但考虑到文档,这应该可以工作,似乎我找不到合理的论点,为什么这不能触发。有人能这么友好地看一下代码吗?提前感谢

代码语言:javascript
复制
<?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函数。

编辑!Activate不起作用,因为sql中出现错误(布尔默认值必须为1或0,它无法识别true/false)

现在激活工作,但是停用不能,尽管sql是可以的,我已经用phpmyadmin尝试过了。需要弄清楚这一点。

EN

回答 2

Stack Overflow用户

发布于 2018-06-21 20:52:00

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

或者,尝试匿名函数回调,以确保您不会进行任何错误处理等。

代码语言:javascript
复制
register_deactivation_hook(__FILE__, function () {
   //something here like
   die('today');
});

当你停用你的插件时,这段代码必须运行。请从那里开始,在里面添加你的函数。

票数 2
EN

Stack Overflow用户

发布于 2018-06-21 20:51:32

你的代码在我看来没问题。确保您的文件名与您的插件名称相同。例如,如果您的插件名为myplugin,则激活脚本需要在wp-content/plugins/myplugin/myplugin.php

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

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

代码语言:javascript
复制
$table_name = $wpdb->prefix . "plus8k_products"; 
$sql = "DROP TABLE $table_name";
$wpdb->query($sql);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50968839

复制
相关文章

相似问题

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