depurando tarefas do wp_cron com XDebug no Eclipse

Eu uso o Eclipse para PHP Developers (Neon.3 Release (4.6.3) no caso de isso importar) e XDebug ao desenvolver plugins / temas. Tudo funciona bem (ou seja, posso definir pontos de interrupção no código do meu plugin e passar por ele, etc.).

No entanto, não consigo conseguir o XDebug parar nos pontos de interrupção em uma function desencadeada por um trabalho WP_Cron de 1 vez. Por exemplo, dado o seguinte:

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 :-) } 

e um ponto de interrupção definido na 1ª linha em wpse_my_cron_function() , o XDebug nunca pára por aí. Eu sei que a function está sendo chamada (por causa dos mods que a function faz para o DB).

Existe alguma coisa que eu preciso fazer na minha configuração do XDebug para depurar tarefas do WP_Cron ou simplesmente não é possível por causa do funcionamento do WP_Cron ?

Solutions Collecting From Web of "depurando tarefas do wp_cron com XDebug no Eclipse"

Acabei de encontrar a resposta para a minha pergunta sobre o stackoverflow … e achei que copiei a resposta aqui para referência futura, pois as pessoas do WP provavelmente provavelmente irão procurar aqui.

Quando WP_Cron triggers um trabalho agendado, ele faz isso através de uma chamada para wp_remote_post () . O truque nessa resposta é encheckboxr no cron_request e adicionar o XDEBUG_SESSION_START=idekey query arg, como em

 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) ; } 

Isso funcionou como um charme e eu consegui minha function cron depurada.

Com a minha necessidade imediata do caminho, queria uma solução mais geral … uma na qual eu não precisava codificar um código IDE específico e é o que eu criei:

 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) ; } 

Espero que isso ajude outros que têm o mesmo problema.