0

我很难弄清楚这个问题。所以基本上,我写了一个插件..文件结构如下

-myplugin.php (init and includes myplugin-common.php )
-myplugin-admin.php (plugin menu item index and includes myplugin-part1.php and part2)
-myplugin-common.php
-myplugin-part1.php
-myplugin-part2.php

我有一个功能可以激活 cron 如果它尚未启用.. 下面的示例(这是在 myplugin.php 中)

function myplugin_cron_activate() {

    if ( get_option( SCHEDULE_ENABLED ) !== false ) {
        if ( get_option(SCHEDULE_ENABLED) == 'true') {
            if (!wp_next_scheduled('wpo_cron_event2')) {

                $schedule_type = get_option(SCHEDULE_TYPE, 'weekly');

                wp_schedule_event(time(), $schedule_type, 'my_cron_event2');
                add_action('my_cron_event2', 'my_cron_action');

        }
        }
    }

现在 *my_cron_action* 在一个公共文件myplugin-common.php 中。这很好,无论如何它都可以工作..

问题是,myplugin-part2.php是启用或禁用调度程序的设置页面。当我启用它时.. 调用 *myplugin_cron_activate()* 函数。但它不会激活 wordpress 中的 cron 功能。但是当我在管理员中转到插件主链接时 - 它被激活了。

请注意myplugin-part1.php 和 myplugin-part2.php都包含在myplugin-admin.php中。myplugin-admin.php包含 2 个选项卡并相应地加载这 2 个文件部分。

我仍然无法弄清楚为什么当我提交设置页面时调度程序没有被激活 - 是的,我正在 $POST 上调用该函数。但是当我单击管理页面的主链接时它会被激活..(因此我也无法显示下一个计划时间)

4

1 回答 1

0

您需要添加每周计划

function add_weekly_cron( $schedules ) {
        $schedules['weekly'] = array(
        'interval' => 604800,
        'display' => __('Once Weekly','beforeafter')
    );
    return $schedules;
}
add_filter( 'cron_schedules', 'add_weekly_cron' ); 

另外,我认为您以错误的方式触发 wp-cron

add_action('my_action_hook','my_cron_function');
if( !wp_next_scheduled( 'my_cron function' ) ) {  
   wp_schedule_event( time(), 'weekly', 'my_action_hook' );  

使用Cron View调试 WP-CRON :)

于 2013-11-03T14:43:02.353 回答