我正在尝试基于默认的wordpress recent posts小部件构建一个小部件。在wp包含/默认小部件中。php,我注意到class WP_Widget_Recent_Posts
在函数widget()中,首先在缓存中查找最近的帖子,如果没有找到,则打开输出缓冲,生成结果,然后存储回缓存。由于我使用的是NuSphere IDE,因此DebugBreak();
在条件内if ( isset( $cache[ $args[\'widget_id\'] ] ) )
(DebugBreak()
导致当前进程中发生断点异常。)但从未执行断点,指出之前未设置缓存。现在不应该是这种情况,因为缓存是由wp_cache_set(\'widget_recent_posts\', $cache, \'widget\');
. 这是我第一次进退两难。
其次,如果有人能解释一下输出缓冲是如何工作的,我将不胜感激。原因正如我前面提到的,最近的帖子首先在缓存中查找,如果不存在,则打开输出缓冲(ob_start();
), 获取结果,然后ob_get_flush();
执行方式如下$cache[$args[\'widget_id\']] = ob_get_flush();
并设置缓存。因此,如果没有输出回显到浏览器,那么小部件实际上如何显示最近的帖子?请帮忙!
最合适的回答,由SO网友:TheDeadMedic 整理而成
除非安装了memcached类型的插件,wp_cache_set
将仅在当前脚本的持续时间内存储数据。在同一实例中再次调用或添加小部件(&A);您将看到它利用了缓存。
至于ob_get_flush()
, taken from the manual:
刷新输出缓冲区,将其作为字符串返回并关闭输出缓冲
换句话说,它打印and 同时返回缓冲区。