瞬态
概述
此页面包含的技术文档WordPress瞬态API,它提供了一种简单而标准化的方式,可以通过给它一个自定义名称和时间范围来临时将缓存数据存储在数据库中,然后它将到期并删除。
瞬态API与选项API但是,随着到期时间的附加功能,这简化了使用的过程wp_options
数据库表以临时存储缓存的信息。
请注意,“ site_”函数本质上与其对应物相同,但是使用WordPress时工作网络很广多站点。
还要注意的是,瞬态是通过缓存插件固有加速的,而正常选项不是。雷竞技一个备忘录例如,插件将使WordPress存储在快速内存中而不是在数据库中。因此,应使用瞬变来存储任何预期到期或可以随时到期的数据。瞬变也不应假定在数据库中,因为它们可能根本不存储在那里。
此外,有可能在到期时间之前不可用。就像缓存所做的一样,您的代码应该具有倒退方法,以重新生成数据,如果瞬态不可用。
瑞安·麦考(Ryan McCue)以这种方式解释票:
每个人似乎都误解了短暂到期的工作原理,因此长期和短暂的是:瞬态到期时间是最长时间。没有最低年龄。设置后或24小时后,瞬态可能会消失一秒钟,但是到期时间后它们将永远不会出现。
本文的预期受众包括WordPress主题作者,插件作者以及任何需要缓存特定数据但希望在给定时间范围内刷新它的人。本文档对PHP脚本有基本的理解。
功能参考
设置/获取瞬态:
删除瞬态:
使用瞬态
保存瞬变
为了保存瞬态,您使用set_transient():
set_transient($ transient,$ value,$ expiration);
$瞬态
(字符串):瞬态名称。
预计不会被SQL排出。必须是172个字符或更少的长度。$值
(数组|对象):保存的数据,是常规变量或数组/对象。
API将为您处理复杂数据的序列化。$到期
(整数):在刷新之前保留数据的最多秒。
瞬态可能在$到期
(由于外部对象缓存或数据库升级),但永远不会返回其价值过去$到期的值。
因此,例如保存$ specion_query_results
对象持续12个小时:
set_transient('special_query_results',$ special_query_results,60*60*12);
使用时间常数
在WordPress 3.5,引入了几个常数以轻松表达时间:
MINUTE_IN_SECONDS = 60 (seconds) HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS MONTH_IN_SECONDS = 30 * DAY_IN_SECONDS YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS
因此,例如,可以简化上面的代码示例至:
set_transient('special_query_results',$ special_query_results,12 * hor_in_in_seconds);
提取瞬变
为了获得保存的瞬态,您使用get_transient():
get_transient($ transient);
$瞬态
:在保存瞬态时使用的唯一slset_transient()
。
在我们的情况下,我们可以通过以下方式获取我们的特殊查询结果:
get_transient('specion_query_results');
如果瞬态不存在或已过期,则get_transient()
将返回错误的
。应使用身份操作员检查一下===
而不是普通平等操作员==
,因为整数值为零(或其他“空”/“假数据”)可能是您要存储的数据。由于这个“错误”值,因此不应使用瞬变来保持平原布尔值(true/false)。将它们放入数组或将它们转换为整数。
示例用法:
if(false ===($ value = get_transient('value'))){//此代码在没有有效的瞬态集时运行}
以上代码将获得瞬态并将其放入$值
。IF块内部的代码仅在没有有效的瞬态时运行。这通常是一种通过其他方式重新生成瞬态值的方法。请记住,有可能在正常到期时间之前不可用。
删除保存的瞬变
自从我们上次跑步以来,一旦$到期秒已经过去,我们的瞬态将自然而然地死于老年set_transient(),但是我们可以通过手动删除它来迫使瞬态死亡。这对于给定的活动(保存帖子,添加类别等)的时间很有用,这将使缓存的数据固有地陈旧并需要更新。
delete_transient($ transient);
$瞬态
:保存时使用的唯一名称set_transient()
。
在我们的情况下,显然,这将是:
delete_transient('specion_query_results');
WordPress很少清理过期的瞬变。为了防止过期的瞬变在数据库中构建,一旦完成,就可以始终删除瞬态,而不再需要它。
完整的示例
将所有内容放在这里是一个示例,说明了如何在代码中使用瞬变。
<?php //如果(false ===($ special_query_results = get_transient('special_query_results'')))){//它不在= new WP_Query('CAT = 5&Order = Random&Tag = Tech&Post_meta_key = Thumbnail');set_transient('special_query_results',$ special_query_results,12 * hor_in_in_seconds);} //像正常的一样使用数据...?>
以及使用的示例delete_transient()。在这种情况下,我们将向edit_term
操作,每次编辑类别或标签时都会运行的操作(即,我们假设术语的编辑使我们的数据无效,并且要删除缓存版本)。
<?php //创建一个简单的函数来删除我们的瞬态函数edit_term_delete_delete_transient(){delete_transient('specion_query_results');} //将函数添加到edit_term挂钩,因此当编辑类别/标签时,它运行add_action('edit_term','edit_term_derm_delete_transient');?>
使用瞬态wp_query检索“特色帖子”:
<?php //检查瞬态。如果没有,则执行wp_query if(false ===($ farried = get_transient('foo_featured_posts')))){$ farried = new wp_query(array('category'=>'featured'='featured','post_per_page'=> 5));//将结果放入瞬态。12小时后到期。set_transient('foo_featured_posts',$特征,12 * hor_in_seconds);??> //找到的特色帖子,<?php end end en e deen;?> <?php else:?> //找不到特色帖子<?php endif;?> <?php wp_reset_postdata();?>
使用插件和主题中的瞬态很简单,只添加了一些额外的代雷竞技码行,但是如果在正确的情况下使用(长/昂贵的数据库查询或复杂的处理数据),它可以节省网站上的几秒钟。