如何使wordpress瞬态过期

时间:2017-04-22 08:21:32

标签: wordpress transient

我想编写更新查询以使瞬态过期。我会在wordpress选项表中将时间提高到1。

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

我的更新查询是

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

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

);

它不起作用。基本上我想删除/过期已存在的瞬态。

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

1 个答案:

答案 0 :(得分:4)

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

一般情况下,您不必担心瞬态到期。 WordPress有一个垃圾收集器,可以自动清除它们。

如果瞬态数据变得陈旧,并且您需要提前更新它,请使用API​​函数:

ListView lv = ...;
var valueList = lv.Items.Cast<ListViewItem>()
    .Select(lvi => (Values)lvi.Tag)
    .ToList();

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

简而言之:

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

使用瞬态的经验法则是:

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