WordPress 调用文章并使用 Transients 进行缓存

Transients 是什么?

Transients 中文直译为“瞬变、临时工”,是 WordPress 中用于存储缓存和临时数据的 API,以 “key-value” 的形式保存数据,你可以给它设置一个到期时间,时间过后清除储存的数据。

默认情况下,Transients 被利用 Options API 储存在 wp_options 表,但是每次储存会生成两条记录,分别是数据内容和它的到期时间。

如果你安装了类似 Memcached 的外部对象缓存插件,WordPress 则会把 Transients 数据直接放到缓存里,提高读取速度。这里演示调用最新文章并使用Transients缓存。

调用最新的文章

新建 new-list.php 文件,文件内容如下:

<code class="language-php"><?php


if ( false === ( $new_article = get_transient( 'new_article_ST' ) ) ) {
  $new_article = new WP_Query();
  $new_article->query('showposts=10'); //显示数量
 set_transient( 'new_article_ST', $new_article, 60 * MINUTE_IN_SECONDS );

 /**
  * 12 * HOUR_IN_SECONDS
  * 12个小时
  * 
  * 60 * 60
  * 1小时
  * 
  * 60 * 60 * 12
  * 12小时
  MINUTE_IN_SECONDS = 60(秒)
  HOUR_IN_SECONDS = 60 * 分钟秒
  DAY_IN_SECONDS = 24 * 时间小时
  WEEK_IN_SECONDS = 7 * 一天在SECONDS
  MONTH_IN_SECONDS = 30 *每天在SECONDS
  YEAR_IN_SECONDS = 365 *每天在SECONDS
  */

}

  while ($new_article->have_posts()) : $new_article->the_post();
?>
    <ul class="new-article-list">
    <article <?php post_class('new-item');?>>
        <h6><a href="<?php the_permalink();?>"><?php the_title();?></a></h6>
    </article>
    </ul>

<?php endwhile; wp_reset_query();?>

清除缓存

functions.php 文件下添加以下内容,用来清理Transients缓存:

<code class="language-php">//清除-最新文章缓存
function clear_new_article_cache(){
    delete_transient( 'new_article_ST' );//删除 Transients 缓存
}
add_action( 'save_post', 'clear_new_article_cache' );//创建和编辑文章
add_action( 'deleted_post', 'clear_new_article_cache' );//删除文章
add_action( 'created_post_tag', 'clear_new_article_cache' );//创建标签
add_action( 'edited_post_tag', 'clear_new_article_cache' );//编辑标签
add_action( 'delete_post_tag', 'clear_new_article_cache' );//删除标签

调用指定分类下的文章

<code class="language-php"><?php

if ( false === ( $specific_category_a = get_transient( 'specific_category_a_ST' ) ) ) {

  $specific_category_a = new WP_Query( array(
    'cat'=>4, //分类id为4的分类目录
    'posts_per_page'=>10, //显示10篇文章
    ) );

set_transient( 'specific_category_a_ST', $specific_category_a, 60 * MINUTE_IN_SECONDS );}

  while ($specific_category_a->have_posts()) : $specific_category_a->the_post();
?>
    <ul class="new-article-list">
    <article <?php post_class('new-item');?>>
        <h6><a href="<?php the_permalink();?>"><?php the_title();?></a></h6>
    </article>
    </ul>

<?php endwhile;?>
<?php wp_reset_query();?>

清除缓存

<code class="language-php">//清除指定分类缓存
function clear_transient_cache(){
    delete_transient( 'specific_category_a_ST' );//删除指定分类缓存
}
add_action( 'save_post', 'clear_transient_cache' );//创建和编辑文章
add_action( 'deleted_post', 'clear_transient_cache' );//删除文章
add_action( 'created_post_tag', 'clear_transient_cache' );//创建标签
add_action( 'edited_post_tag', 'clear_transient_cache' );//编辑标签
add_action( 'delete_post_tag', 'clear_transient_cache' );//删除标签

调用标签云

<code class="language-PHP"><?php 
    $tag_cloud = get_transient( 'tag_cloud' );
    if ( false === $tag_cloud || '' === $tag_cloud ){
        $args = array('echo' => false);
        $tag_cloud = wp_tag_cloud( $args );
        set_transient( 'tag_cloud', $tag_cloud, 60*60*12 );
    }
    echo $tag_cloud;
 ?>
WordPress 调用文章并使用 Transients 进行缓存
Share this