" register_activation_hook"来自另一个文件

时间:2014-08-07 07:14:02

标签: php wordpress

我是wordpress的新手,我想在我的插件中添加激活挂钩。我想运行函数而不是从激活挂钩放置的同一个文件。可能吗?我试过了:

dy_ressel.php(主插件文件):

$my_variable_for_identify_dir = plugin_dir_url( __FILE__ ) ;
register_activation_hook( $my_variable_for_identify_dir.'install.php','install_dy_ressel');

并安装.php

function install_dy_ressel(){
        global $wpdb; 

        // Добавить к названию будущих табли префикс WP
        $table_users = $wpdb->prefix . "dy_users";


        // ПРоверка по наличию таблиц. Если нету или удалены - создать.

        if($wpdb->get_var("SHOW TABLES LIKE '$table_users'") != $table_users) {
            $sql = "CREATE TABLE " . $table_users . " (
              id mediumint(9) NOT NULL AUTO_INCREMENT,
              time bigint(11) DEFAULT '0' NOT NULL,
              name tinytext NOT NULL,
              text text NOT NULL,
              url VARCHAR(55) NOT NULL,
              UNIQUE KEY id (id)
            );";

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

3 个答案:

答案 0 :(得分:7)

  

我想运行的功能不是来自放置激活挂钩的同一文件。

你回答了自己的问题。

您只需将激活挂钩放在主插件文件中即可。但它可以在任何地方的功能,只要文件包含在WordPress调用之前。

您的主插件文件可能包含:

include( 'initialize-plugin.php' );
register_activation_hook( __FILE__, 'install_dy_ressel' );

您的initialize-plugin.php可以拥有以下功能:

function install_dy_ressel() {
    ...

答案 1 :(得分:1)

不需要从插件的主文件中调用

register_activation_hook,只要您有一些方法可以将插件的主文件路径传达给那段代码。这是一个简单的方法:

index.php(或者您称之为插件的主要文件):

define('MYPLUGIN_MAIN_FILE_PATH', __FILE__);
require_once(__DIR__ . '/install.php');

install.php

function install_my_plugin() {
  // do stuff.
}
register_activation_hook(MYPLUGIN_MAIN_FILE_PATH, 'install_my_plugin');

答案 2 :(得分:0)

dy_ressel.php

include_once dirname( __FILE__ ).'/install.php';
register_activation_hook( __FILE__, array( 'Register', 'install_dy_ressel' ) );

install.php了:

Class Register {
    static function install_dy_ressel() {
        //register some short codes;
    }
    static function uninstall_dy_ressel {
        //unregister previous short codes;
    }
}