【问题标题】:wordpress plugin activate/deactivate function not firingwordpress 插件激活/停用功能未触发
【发布时间】:2018-06-21 12:41:02
【问题描述】:

我必须为 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,它无法识别真/假)

现在激活工作,但停用虽然 sql 没问题,但我已经用 phpmyadmin 尝试过。需要弄清楚这一点。

【问题讨论】:

    标签: php mysql wordpress


    【解决方案1】:

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

    或者尝试匿名函数回调,以确保您没有进行任何拼写错误等。

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

    当您停用插件时,此代码必须运行。请从那里获取它,在里面添加你的功能。

    【讨论】:

    • “Mispelings”拼写错误。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多