Viewing 4 replies - 1 through 4 (of 4 total)
  • Moderator bcworkz

    (@bcworkz)

    If your included file is using __FILE__ to register, its value will lead to the file in its sub-folder, but you need it to lead to the main plugin file. So if you pass the right path in the included file by not using __FILE__ then the activation hook can execute normally.

    You cannot use plugin_dir_path() for the same reason. Maybe something like
    WP_PLUGIN_DIR . '/my-plugin/my-plugin.php'

    Thread Starter Carl Brubaker

    (@imconfused4sure)

    @bcworkz I think I tried what you said, but that didn’t work either. Here’s the setup:

    my-plugin
      |-main.php
      |-activate-deactivate.php
    // main.php
    
    if (is_admin()) {
        // I tried both of these with the same result
        require_once plugin_dir_path(__FILE__) . 'activate-deactivate.php';
        // or
        require_once WP_PLUGIN_DIR . '/my-plugin/activate-deactivate.php';
    }
    // activate-deactivate.php
    
    function my_plugin_on_activation()
    {
        if (!current_user_can('activate_plugins')) {
            return;
        }
    
        $plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
        check_admin_referer("activate-plugin_{$plugin}");
    
        // other stuff that should happen...
    }
    register_activation_hook(__FILE__, 'my_plugin_on_activation');
    
    function my_plugin_on_deactivation()
    {
        if (!current_user_can('activate_plugins')) {
            return;
        }
    
        $plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
        check_admin_referer("deactivate-plugin_{$plugin}");
    
        // other stuff that should happen...
    }
    register_deactivation_hook(__FILE__, 'my_plugin_on_deactivation');

    Again, these functions work from within main.php, but not when placed in their own file.

    Moderator bcworkz

    (@bcworkz)

    OK, but you’re still using __FILE__ in activate-deactivate.php. That’s the one not returning the path you need. Are you saying you tried an alternative there and it didn’t work? If so, perhaps something else is at play, but use of __FILE__ in that context is still incorrect.

    Thread Starter Carl Brubaker

    (@imconfused4sure)

    @bcworkz Thanks, I understand what you meant now, and it is working. Here are my new files:

    // main.php
    
    if (is_admin()) {
        require_once plugin_dir_path(__FILE__) . 'activate-deactivate.php';
    }
    // activate-deactivate.php
    
    function my_plugin_on_activation()
    {
        if (!current_user_can('activate_plugins')) {
            return;
        }
    
        $plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
        check_admin_referer("activate-plugin_{$plugin}");
    
        // other stuff that should happen...
    }
    register_activation_hook(WP_PLUGIN_DIR . '/my-plugin/main.php', 'my_plugin_on_activation');
    
    function my_plugin_on_deactivation()
    {
        if (!current_user_can('activate_plugins')) {
            return;
        }
    
        $plugin = isset($_REQUEST['plugin']) ? $_REQUEST['plugin'] : '';
        check_admin_referer("deactivate-plugin_{$plugin}");
    
        // other stuff that should happen...
    }
    register_deactivation_hook(WP_PLUGIN_DIR . '/my-plugin/main.php', 'my_plugin_on_deactivation');
Viewing 4 replies - 1 through 4 (of 4 total)
  • The topic ‘Is it possible to register_activation_hook() outside of the main file?’ is closed to new replies.