通过 CRON 更改 PHP 全局变量

关于 PHP、wordpress 和 CRONE 的问题。我无法通过小部件调用的函数中的 CRON 过程更改全局变量。


$container


register_activation_hook(__FILE__, 'activate_my_plugin');

function activate_my_plugin() {

    wp_clear_scheduled_hook('update_container');

    wp_schedule_event( time(), 'hourly', 'update_container');

}


add_action('update_container', 'update_container');

function update_container() {

    global $container;

    // updating container

}


function use_container() {

    global $container;

    // !And here we have undefined $container

}


class acw_widget extends WP_Widget{

    // ... 


    public function widget( $args, $instance ) 

    {

        use_container();

    }

}

我正在尝试在 WP 站点上缓存对 DB 的请求。因此,我决定使用 CRON 来安排请求并将结果存储在某个全局容器中。假设小部件会出于其目的从容器中获取数据,但我遇到了看起来像“未定义容器”的问题。


因此,我激活插件,wp-cron.php 显示,该容器已更新(在“update_container”处),但在“use_container”中获取容器显示,$container 未定义且未更新。


请你解释一下,为什么会这样?如何跟踪初始化/更新全局容器的正确顺序?


代码是真实代码的简化版。也许这很尴尬,但我是 PHP 和 wordpress 的新手,所以这是我找到的解决方案。


喵喵时光机
浏览 197回答 1
1回答

慕莱坞森

您不能使用任何变量 (inc global) 作为数据“容器”。因为 PHP 没有状态,所以每个 php 脚本都是“从头开始”运行的。因此,当您的CRON脚本运行时 - 它global $container仅针对当前运行进行更新。然后,当您运行您的widget功能时 - 它是另一个“运行”,您会发现它$container没有定义。您需要的不仅仅是使用变量,而是将数据存储在数据库中(CRON例如通过相同的脚本)。然后,每次您需要该数据时 - 只需从数据库中获取即可。希望能向你澄清一些事情。
打开App,查看更多内容
随时随地看视频慕课网APP