如何使 wordpress 瞬变过期

sma*_*chy 2 wordpress transient

我想编写更新查询来过期瞬态。我将在 wordpress 选项表中将他们的时间更新为 1。

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

我的更新查询是

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

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

);
Run Code Online (Sandbox Code Playgroud)

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

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

Iho*_*nov 6

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

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

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

delete_transient( 'your_transient_name' );
Run Code Online (Sandbox Code Playgroud)

另请注意,过期时间是瞬态可以存活的长时间。在那段时间之后,它将永远不会返回存储的值。但是,由于对象缓存逐出、数据库升级等原因,它可能在到期时间之前不可用。

所以,简而言之:

  • 过期时间是未来瞬态调用将停止返回值的最大点
  • 由于其他原因,它可能在到期时间到来之前很久就丢失了

处理瞬态的经验法则是:

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