草庐IT

php - WP cron 事件触发,但未在调试中命中断点

coder 2024-05-05 原文

我遇到了一个我无法解决的问题。我已经设置了自定义 WP cron 计划和具有该计划的 WP cron 事件。我正在使用 PHPStorm 进行调试,并且在 check_mail() Hook 内设置了一个断点。断点永远不会被击中,但是 check_mail() 中的代码被执行,因为我可以在我的日志文件中看到条目(“Got to check_mail()!”)

所有其他断点工作正常,check_mail() 例程中只有两行代码 - 日志写入和返回。

代码运行但我的断点从未命中,这是怎么发生的?

在构造函数中:

add_action( 'check_mail', array($this, 'check_mail' ), 10, 0);

if ( !defined( 'DOING_AJAX' ) || !DOING_AJAX ) {
    add_action( 'init', array( $this, 'schedule_wp_cron' ), 10, 0 );
}

支持例程:

public function schedule_wp_cron()
{
    /**
     * Avoid rescheduling cron if it's already scheduled.
     */

    $args = array( );

    if ( !wp_next_scheduled( 'check_mail' )) {

        /**
         * Schedule mail server polling.
         */
        wp_schedule_event( time(), 'custom_interval', 'check_mail');

        }

    }

    public function check_mail( )
    {

        // **BREAKPOINT SET ON NEXT LINE**
        write_log( 'emails', 'Got to check_mail()!' );

        //... do something ...

        return;

    }


    public function custom_cron_schedule( $schedules )
    {

        $schedules[ 'custom_interval' ] = array(
            'interval' => 300,
            'display'  => 'Custom Interval',
        );

        return $schedules;
    }

最佳答案

WP Cron 任务通过远程 POST 请求在单独的进程上运行。 PhpStrom 不会在代码中设置的任何断点处停止,因为请求中不存在调试 session 启动参数。

这是解决方案。过滤器将为所有 WP Cron 请求添加额外的参数。将 XDEBUG_SESSION_START 值替换为您的值(我使用默认值)并将代码放在您的插件或主题代码下方。即使是 cron 任务,PhpStorm 也会在任何断点处停止。

add_filter( 'cron_request', 'wp_cron_debug', 10, 2 );
function wp_cron_debug( $args, $doing_cron ) {

    $args['url'] = add_query_arg( array(
        'XDEBUG_SESSION_START' => 'PHPSTORM' // <== replace PHPSTORM with your key
    ), $args['url'] );

    return $args;

}

PhpStrom IDE key value location

希望对您有所帮助!

关于php - WP cron 事件触发,但未在调试中命中断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41047039/

有关php - WP cron 事件触发,但未在调试中命中断点的更多相关文章

  1. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  2. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  3. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  4. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  5. ruby-on-rails - 事件记录 : Select max of limit - 2

    我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).

  6. ruby - ruby 乘法语句中星号中断语法前的空格 - 2

    在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl

  7. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  8. ruby-on-rails - 事件管理员和自定义方法 - 2

    这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什

  9. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  10. ruby - Faye WebSocket,关闭处理程序被触发后重新连接到套接字 - 2

    我有一个super简单的脚本,它几乎包含了FayeWebSocketGitHub页面上用于处理关闭连接的内容:ws=Faye::WebSocket::Client.new(url,nil,:headers=>headers)ws.on:opendo|event|p[:open]#sendpingcommand#sendtestcommand#ws.send({command:'test'}.to_json)endws.on:messagedo|event|#hereistheentrypointfordatacomingfromtheserver.pJSON.parse(event.d

随机推荐