0

こんにちは、ワードプレスの register_activation_hook() 関数を使用してプラグインの有効化に存在しない場合は、テーブルを作成しようとしています。

コードをプラグインのメイン ファイル (プラグインのメタを定義する場所) に配置すると、コードは正常に動作しますが、サブ ディレクトリ内の他のファイルで使用しようとすると、動作しません。register_activation_hook(__FILE__, 'my_medias_db');プラグインのルート パスに変更しようとしましregister_activation_hook(to_plugin_root_path, 'my_medias_db');たが、まだ機能していません。何か案が?

ここにコードがあります

function my_medias_db() {
    require_once( ABSPATH . '/wp-admin/includes/upgrade.php' );
    global $wpdb;
    $db_table_name = $wpdb->prefix . 'my_medias';
    if( $wpdb->get_var( "SHOW TABLES LIKE '$db_table_name'" ) != $db_table_name ) {
        if ( ! empty( $wpdb->charset ) )
            $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
        if ( ! empty( $wpdb->collate ) )
            $charset_collate .= " COLLATE $wpdb->collate";

        $sql = "CREATE TABLE " . $db_table_name . " (
            `id` int(11) NOT NULL AUTO_INCREMENT,
            `post_id` int(11) NOT NULL,
            `image_name` text NOT NULL,
            `status` tinyint(1) DEFAULT NULL,
            PRIMARY KEY (`id`)
        ) $charset_collate;";
        dbDelta( $sql );
    }
}
register_activation_hook(__FILE__, 'my_medias_db');
4

1 に答える 1

0

上記のコードはメインのプラグイン インデックス ファイルにありますか?

そうでない場合、それはあなたの問題です。wp コードを見ると、activation_hook 呼び出しはプラグイン インデックス ファイルである $file パラメータに依存しているため、別のファイルから register_activation_hook を呼び出す場合は、次のようにしてみてください (これは OO の例です)。

...をちょきちょきと切る...

    $strPluginFilename = $this->getMainPluginFilename();
    // rcarver - the activation hook calls rely on the file name being the plugin index!
    register_activation_hook($strPluginFilename, array($this, 'baseActivate') );
    register_deactivation_hook($strPluginFilename, array($this, 'baseDeactivate') );

...をちょきちょきと切る...

protected function getMainPluginFilename() {
    // eg. /some/place/wp-content/plugins/my_cool_plugin/pluginbase.php will
    // result in the base file name of  "my_cool_plugin.php"
    // NOTE: THIS ONLY WORKS IF THE CURRENT FILE IS IN THE SAME DIRECTORY
    //       AS THE MAIN PLUGIN FILE!
    return dirname(__FILE__) . '/' . basename(dirname(__FILE__)) . '.php';
}

...をちょきちょきと切る...

于 2013-10-30T14:48:34.297 に答える