在Eclipse中使用XDebug调试wp_cron作业

时间:2017-05-25 作者:Paul \'Sparrow Hawk\' Biron

我为PHP开发人员使用Eclipse(Neon.3发行版(4.6.3)以备不时之需)和XDebug来开发插件/主题。这一切都很好(即,我可以在插件代码中设置断点并逐步执行,等等)。

然而,我似乎无法让XDebug在由1次触发的函数中的断点处停止WP_Cron 工作例如,给定以下条件:

add_action (\'wpse_my_hook\', \'wpse_my_cron_function\') ;

function
wpse_my_function ()
{
    // schedule an immediate 1-time cron job
    wp_schedule_single_event (time (), \'wpse_my_hook\', array ($some_data)) ;
}

function
wpse_my_cron_function ($some_data)
{
    $example = \'\' ; // set a breakpoint here

    // do something really cool :-)
}
在中的第一行设置断点wpse_my_cron_function(), XDebug从未就此止步。我知道该函数正在被调用(因为该函数对DB进行了mods)。

在我的XDebug设置中是否需要做些什么来调试WP_Cron 还是因为这样就不可能WP_Cron 作品

1 个回复
最合适的回答,由SO网友:Paul \'Sparrow Hawk\' Biron 整理而成

我刚刚找到我问题的答案stackoverflow...我想我会把答案抄到这里,以备将来参考,因为WP的人可能更倾向于看这里。

什么时候WP_Cron 激发计划作业,它通过调用wp_remote_post(). 这个答案的诀窍是cron_request 并添加XDEBUG_SESSION_START=idekey 查询参数,如中所示

add_action (\'cron_request\', \'wpse_cron_add_xdebug_session_start\', 10, 2) ;

function
wpse_cron_add_xdebug_session_start ($args, $doing_cron)
{
    $args[\'url\'] = add_query_arg (array (\'XDEBUG_SESSION_START\' => \'ECLIPSE_DBGP\'), $args[\'url\']) ;

    return ($args) ;
}
这很有魅力,我调试了cron函数。

由于我的迫切需要,我想要一个更普遍的解决方案。。。在其中,我不必硬编码特定的IDE密钥,这就是我想到的:

add_action (\'cron_request\', \'wpse_cron_add_xdebug_cookie\', 10, 2) ;

/**
 * Allow debugging of wp_cron jobs
 *
 * @param array $cron_request_array
 * @param string $doing_wp_cron
 *
 * @return array $cron_request_array with the current XDEBUG_SESSION cookie added if set
 */
function
wpse_cron_add_xdebug_cookie ($cron_request_array, $doing_wp_cron)
{
    if (empty ($_COOKIE[\'XDEBUG_SESSION\'])) {
        return ($cron_request_array) ;
        }

    if (empty ($cron_request_array[\'args\'][\'cookies\'])) {
        $cron_request_array[\'args\'][\'cookies\'] = array () ;
        }
    $cron_request_array[\'args\'][\'cookies\'][\'XDEBUG_SESSION\'] = $_COOKIE[\'XDEBUG_SESSION\'] ;

    return ($cron_request_array) ;
}
我希望这能帮助其他有同样问题的人。

结束

相关推荐

WP-Cron function not firing

我正在尝试使用cron获得一个简单的php函数(基于教程)。我有以下几点:<?php if (!wp_next_scheduled(\'please_just_work\')) { wp_schedule_event( time(), \'daily\', \'please_just_work\' ); } add_action ( \'please_just_work\', \'my_task_function\' ); function my_task_func