admin_init钩子无法按预期运行(无法写入日志,无法添加操作)

时间:2020-07-17 16:46:05

标签: wordpress wordpress-hook

我正在尝试在插件激活后添加一些操作。我发现应该或多或少这样做:

register_activation_hook( __FILE__, 'activation_function' );
add_action('admin_init', 'after_activation_function');


function activation_function(){
   add_option( 'activated_plugin_xyz', 'plugin xyz activated' );  //option is added to database
}

function after_activation_function(){
   if (is_admin() && get_option ('activated_plugin_xyz') == 'plugin xyz activated'){
      //do some things
      wp_schedule_event(time(), 'daily', 'some_cron'); //cron event is added
      add_action('wp_login', 'xyz_login_action'); 
      add_action('some_cron', 'xyz_cron_job');  //cron job is correctly hooked
      //delete_option('activated_plugin_xyz');
   }
    error_log("nothing in debug.log log...");
    echo ("echoing works");
    //wp_die('dying works');
}

function xyz_cron_job(){
    error_log('cron job not logging anything...');  //nothing in log...
}

我可以在wp crontrol中看到cron作业,该函数xyz_cron_job已挂接,但是当我手动触发它时,没有任何内容写入日志。 xyz_login_action似乎也不起作用。 如果我在xyz_cron_job中做其他事情,它们似乎也没有效果...

after_activation_function称为bcs dying工程,如果我取消注释的话。有谁能够帮助我?在我看来,我似乎缺少一些基本知识...

1 个答案:

答案 0 :(得分:0)

修复了该问题:

动作必须在after_activation_function()之外添加

(我想每次wp加载时都必须钩住动作,如果钩在after_activation_function()中发生,则钩子要在钩住动作之前运行)

工作代码如下:

register_activation_hook( __FILE__, 'activation_function' );
add_action('admin_init', 'after_activation_function');

//hook outside other functions
add_action('some_cron', 'xyz_cron_job'); 
add_action('wp_login', 'xyz_login_action'); 

function activation_function(){
   add_option( 'activated_plugin_xyz', 'plugin xyz activated' );  //option is added to database
}

function after_activation_function(){
   if (is_admin() && get_option ('activated_plugin_xyz') == 'plugin xyz activated'){
      //do some things
      wp_schedule_event(time(), 'daily', 'some_cron');
      delete_option('activated_plugin_xyz');
   }
}

function xyz_cron_job(){
   error_log('logging works');
}