如何检测WordPress中帖子数量的变化?

时间:2016-08-03 07:07:33

标签: php wordpress caching cron

这更像是一个代码审查请求,而不是一个bug。问题是这是否是编写以下功能的“正确方法”。

我想要的是运行一个php cron任务来检查博客中的帖子数量是否发生了变化,如果是这样的话 - 删除主页缓存的html。

我可以使用$插件来设置php cron任务。我需要的是创建一个全局变量的函数,它将存储在帖子数量的某个位置(我使用了wp_options表),每次都要询问服务器当前的帖子数量。如果存在差异,则清除缓存。以下是我最终编写的功能。它是否有意义,或者我应该做些什么不同(/更好?)

WP Crontrol

2 个答案:

答案 0 :(得分:2)

首先回答你的问题,我将字符串“已发布帖子的数量”提取为常量,类似于OPTION_KEY。 我还会使它更简洁和数据库-y,并带有前缀,以防止冲突。类似'npdhc:number_posts'。

回答你没有问过的问题:我不认为帖子的数量是决定破坏缓存的最佳方式。 从理论上讲,你可以进入边缘条件,你发布一个帖子并删除另一个帖子,缓存不会更新。

更正确,也更简单的编码,只使用上一篇文章的修改时间(我认为它是$post_modified_gmt但不确定)

答案 1 :(得分:1)

查看

你的代码是一个很好的黑客清理缓存,但它毕竟是一个黑客攻击,我不会在生产环境中使用它。

原因是 -

  1. 正如其他人指出的那样,您的代码并未涵盖边缘情况。如果您发布帖子并取消发布其他帖子,则计数保持不变。 cron不会运行。在一个多作者网站中,这种边缘情况可能会发生得太频繁,而你的cron将会受到欢迎。
  2. 这不利用WordPress为您提供的处理post_publish等事件的功能。
  3. 虽然每次你的cron运行时添加的数据库的影响可能不会太大,但我宁愿避免它。
  4. <强>解决方案

    现在回答你的问题,我会使用动作挂钩。 https://developer.wordpress.org/reference/functions/add_action/

    function clearCacheOnStateChange( $new_status, $old_status, $post ) {
        if ( $new_status != $old_status ) {
            unlink(dirname(__FILE__) . "/wp-content/cache/supercache/sitename.com/" . 'index.html.gz');       
        }
    }
    add_action(  'transition_post_status',  'clearCacheOnStateChange', 10, 3);