1. David Wu首页
  2. WordPress
  3. WordPress安装教程

WordPress操作缓存和cookie示例方法-WordPress开发教程

WordPress Transients API Transients 是瞬时的意思,WordPress Transients API 是 WordPress 用来缓存一些复杂的 SQL 查询和运算结果的最简单的方法。它给这些需

WordPress操作缓存和cookie示例方法-WordPress开发教程

WordPress Transients API

Transients 是瞬时的意思,WordPress Transients API 是 WordPress 用来缓存一些复杂的 SQL 查询和运算结果的最简单的方法。它给这些需要缓存的数据一个过期时间,并且时间一到就会自动删除,所以如果你在制作 WordPress 插件的时候,需要存储一些有一定生命周期的数据的时候,Transients API 是最好的选择。

WordPress Transients API 缓存的数据存储在哪里

这个取决你的服务器设置,如果你的服务器开启 Memcache 这类对象缓存,那么缓存的数据就存在 Memcached 的内存中。如果没有开启的话,则存储到 WordPress 数据库的 Options 表中。

WordPress Transients API 的函数

上面说到服务器没有开启的时候,数据是存储到 Options 表中的,所以它接口函数和 WordPress 的 Option API (get_option, add_option, update_option, delete_option))基本一样,唯一区别就是 Transients API 有一个过期时间。所以 WordPress Transients API 有类似的以下三个函数:

set_transient() // 保存一个临时数据到缓存中 
get_transient() // 从缓存中获取一个临时数据 
delete_transient() // 从缓存中删除一个临时数据

如果你使用函数 get_transient 去获取一个临时变量,它已经过期或者不存在,则返回 false。另外 Transients API 不会将数据库的 Options 表充满,因为临时变量一旦过期,下次获取的时候就会自动被删除。

//获取标签云集 
function Bing_page_tags(){ 
    if( ( $cache = get_transient( 'page_tags_list' ) ) !== false ) return $cache;//如果有 Transients 缓存则直接返回 
    //如果没有缓存则开始生成 HTML 代码 
    $code = ''; 
    if( $tags = get_tags( 'orderby=count&order=DESC' ) ){ 
        foreach( $tags as $tag ){ 
            $code .= '<li class="tag-box">'; 
                $post = current( get_posts( array( 
                    'tag_id'         => $tag->term_id, 
                    'posts_per_page' => 1 
                ) ) ); 
                $code .= "<p class='tag-name'>$tag->name</p>"; 
                $code .= sprintf( '<a href="%s">%s</a>', esc_url( get_permalink( $post ) ), get_the_title( $post ) ); 
            $code .= '</li>'; 
        } 
        $code .= "<ul id='tags_list'>$code</ul>"; 
    } 
    //建立 Transients 缓存并返回代码 
    set_transient( 'page_tags_list', $code, DAY_IN_SECONDS );//缓存有效 24 小时 
    return $code; 
}

上面的代码用来生成标签云集的 HTML 代码,并且缓存 24 小时(DAY_IN_SECONDS 为时间常量,表示 24 小时的秒数),如果存在缓存则直接返回,不用再次生成,避免大量 SQL 查询。

但这期间修改标签或文章却无法立即显示,所以还需要在特定事件清除缓存:

//清除标签云缓存 
function clear_page_tags_cache(){ 
    delete_transient( 'page_tags_list' );//删除 Transients 缓存 
} 
add_action( 'save_post', 'clear_page_tags_cache' );//创建和编辑文章 
add_action( 'deleted_post', 'clear_page_tags_cache' );//删除文章 
add_action( 'created_post_tag', 'clear_page_tags_cache' );//创建标签 
add_action( 'edited_post_tag', 'clear_page_tags_cache' );//编辑标签 
add_action( 'delete_post_tag', 'clear_page_tags_cache' );//删除标签

使用 WordPress 对象缓存

下面是把把相关日志的数据写入缓存的例子,使用当前 post ID 作为 key,’related_post’ 作为 group,缓存时间为一个小时,即 3600 秒。

global $post; 
$related_posts_data = wp_get_related_posts(); 
wp_cache_set($post->ID,$related_posts_data,'related_posts',3600);

上面只是把数据存到缓存对象中,我们在显示相关日志的时候,就要去调用这个对象缓存来使用,首先检查下是否已经有了缓存,如果你要的信息没有在缓存中,或者已经过期了。wp_cache_get() 会返回 false,如果这样,你就要去数据库中重新获取这些信息。否则就返回在缓存中的信息。

global $post; 
$related_posts_data = wp_cache_get($post->ID,'related_posts'); 
if(false === $related_posts_data){ 
    $related_posts_data = wp_get_related_posts(); 
    wp_cache_set($post->ID,$related_posts_data,'related_posts',3600); 
} 
echo $related_posts_data;

因为设置了一个小时,相关日志的数据就失效,这里一般就无需更新缓存了,如果你在后台更改了设置,需要立即清理缓存,可以使用 wp_cache_delete 进行清理:

wp_cacache_delete($post->ID,'related_posts');

WordPress中如何设置cookie

编写WordPress插件和主题的时候,经常需要用到cookie,比如存取用户状态等,我之前编写的插件Ludou Simple Vote就用cookie来记录用户投票时间,以实现简单的防止重复投票功能。

1、在主题文件functions.php中添加以下代码,以设置cookie:

/** 
 * 函数名称,setcookie的相关参数等可以自行修改 
 */ 
function set_newuser_cookie() { 
    if (!isset($_COOKIE['sitename_newvisitor'])) { 
        setcookie('sitename_newvisitor', 1, time()+1209600, COOKIEPATH, COOKIE_DOMAIN, false); 
    } 
} 
  
add_action( 'init', 'set_newuser_cookie'); 
// 上面一行代码也可以改成下面一行代码 
// add_action('after_setup_theme', 'set_newuser_cookie');

2、然后在需要调用cookie值的地方读取cookie

if (isset($_COOKIE['sitename_newvisitor'])) { 
     echo 'Welcome back!'; 
} 
else { 
     echo 'Hello new visitor!'; 
}

原创文章,作者:DavidWu,如若转载,请注明出处:https://www.davidwu.net/archives/121489

服务项目 服务内容 收费标准(元)
开发定制 WordPress主题/插件开发定制 (以最终需求为准)
主题/插件汉化 汉化团队WordPress主题/插件,翻译率95% (以标的主题/插件的句子数量为准)
服务器环境配置 基于您现有服务器,搭建配置网站运行环境,结合我们多年来实战经验,可完美支持WordPress等PHP程序运行,并配置伪静态规则、优化目录权限等问题。服务器我们强烈推荐使用Linux系统。 100元/次
网站托管 若贵站目前尚无技术人员,无法完成服务器环境配置,可选择我们的网站托管服务,直接交付正常运行的WordPress站点,并且无需担心服务器的后续维护工作,一切都由我们来帮您完成。 标配套餐:1000元/年/站点 高配套餐:联系客服获取
网站加速优化 从服务器后端配置优化到WordPress数据库缓存、前端页面缓存、JS和CSS压缩合并,全方位优化网站加载速度,实现秒开。(此服务仅针对(云)服务器/VPS) 500元/次(仅站内优化200元/次)
主题配置 本站所有主题均支持,可快速实现,若有任何问题可以咨询客服解决,若您希望我们提供配置服务,可选购此服务。 英文主题安装 60元/次 汉化主题安装 30元/次
HTTPS配置 HTTPS已经不断普及,并且有着更高的安全性以及SEO上的优待。该服务收取的为服务费,SSL证书产生的费用请自行承担。 100元/次
网站搬家 迁移网站所有文件和数据库信息、网站相关配置的调整、以及迁移中的疑难问题故障排除。 标准收费:500元/次 若网站数据量大,需协商
网站运维 提供整站的运维服务,保证网站正常运行。包含:网站故障定位及排除、网站数据备份和恢复、网站攻击及木马等问题的处理等 标准收费:2000元/年 IP 5000以上需协商

发表评论

邮箱地址不会被公开。 必填项已用*标注