如何使 wordpress 瞬变过期

How to expire a wordpress transients

我想编写更新查询以使瞬态过期。我将在 wordpress 选项 table.

中将他们的时间更新为 1

我有以名称 re_compare 开头的瞬变,并在参数更改后休息。

我的更新查询是

$wpdb->update( 
    'options', 
    array( 
        'option_value' => '1',  // string

    ), 
    array( 'option_name' => '%re_compare%' )

);

它不工作。基本上我想删除/终止已经存在的瞬变。

但是如果我从选项中删除瞬态 table 它们仍然会显示在瞬态管理器插件中。所以想到将它们的过期时间设置为 1 秒。

不建议通过普通 SQL 从选项 table 中删除或修改瞬变。为什么?因为数据库实际上是存储瞬变的默认回退位置,而不是主要位置。如果有任何可用的对象缓存,则瞬态存储在那里,而不是在数据库中。因此,在您的情况下,很可能是这种情况 - 您正在从选项 table 中删除它们,但它们实际上是从对象缓存中读取的。

一般来说,您不必担心瞬变过期。 WordPress 有一个垃圾收集器可以自动清除它们。

如果 transients 中的数据变得陈旧并且您需要在它过期之前更新它,请为此使用 API 函数:

delete_transient( 'your_transient_name' );

另请注意,过期时间是 transient 可以存活的最大 时间段。在那段时间之后,它将永远不会 return 存储值。但是,由于对象缓存逐出、数据库升级等原因,它可能在到期时间之前很久就无法使用

所以,简而言之:

  • 过期时间是未来的最大时间点,此时瞬时调用将停止return计算值
  • 可能因为其他原因,在过期时间到来之前很久就丢失了

处理瞬变的经验法则是:

  1. 使用 API 函数
  2. 设置瞬变
  3. 将过期时间设置为您绝对不希望它再有效的时间
  4. 如果您这边的数据发生变化(并且很可能会再次生成),请使用 API 函数将其删除
  5. 或者等它自然过期
  6. 稍后会被WP垃圾回收
  7. 在过期时间到来之前,不要指望它们始终可供您使用。不能保证它们会持续存在。