• AG8游戏博客公告栏:深圳AG8游戏专注于SEO优化培训,免费给深圳SEO爱好者提供SEO技术培训教程,兼深圳地区公司网站排名优化等服务!

WordPress操作缓存和cookie示例方法

WordPress教程 AG8游戏博主 8次浏览 已收录 0个评论 扫描二维码

深圳SEOAG8游戏这几天因为一些问题,零时学习WordPress的缓存以及cookie,找到了想要的,都说好东西,索性直接摘抄了,混合匀兑一下,自己这里记录下,留作记录,下次来复习。

WordPress操作缓存和cookie示例方法

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 有类似的以下三个函数:

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

代码示例

  1. //获取标签云集
  2. function Bing_page_tags(){
  3. if( ( $cache = get_transient( ‘page_tags_list’ ) ) !== false ) return $cache;//如果有 Transients 缓存则直接返回
  4. //如果没有缓存则开始生成 HTML 代码
  5. $code = ;
  6. if( $tags = get_tags( ‘orderby=count&order=DESC’ ) ){
  7. foreach( $tags as $tag ){
  8. $code .= ‘<li class=”tag-box”>’;
  9. $post = current( get_posts( array(
  10. ‘tag_id’ => $tag->term_id,
  11. ‘posts_per_page’ => 1
  12. ) ) );
  13. $code .= “<p class=’tag-name’>$tag->name</p>”;
  14. $code .= sprintf( ‘<a href=”%s”>%s</a>’, esc_url( get_permalink( $post ) ), get_the_title( $post ) );
  15. $code .= ‘</li>’;
  16. }
  17. $code .= “<ul id=’tags_list’>$code</ul>”;
  18. }
  19. //建立 Transients 缓存并返回代码
  20. set_transient( ‘page_tags_list’, $code, DAY_IN_SECONDS );//缓存有效 24 小时
  21. return $code;
  22. }

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

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

  1. //清除标签云缓存
  2. function clear_page_tags_cache(){
  3. delete_transient( ‘page_tags_list’ );//删除 Transients 缓存
  4. }
  5. add_action( ‘save_post’, ‘clear_page_tags_cache’ );//创建和编辑文章
  6. add_action( ‘deleted_post’, ‘clear_page_tags_cache’ );//删除文章
  7. add_action( ‘created_post_tag’, ‘clear_page_tags_cache’ );//创建标签
  8. add_action( ‘edited_post_tag’, ‘clear_page_tags_cache’ );//编辑标签
  9. add_action( ‘delete_post_tag’, ‘clear_page_tags_cache’ );//删除标签

使用 WordPress 对象缓存

  1. global $post;
  2. $related_posts_data = wp_get_related_posts();
  3. wp_cache_set($post->ID,$related_posts_data,‘related_posts’,3600);
  1. global $post;
  2. $related_posts_data = wp_cache_get($post->ID,‘related_posts’);
  3. if(false === $related_posts_data){
  4. $related_posts_data = wp_get_related_posts();
  5. wp_cache_set($post->ID,$related_posts_data,‘related_posts’,3600);
  6. }
  7. echo $related_posts_data;
  1. wp_cacache_delete($post->ID,‘related_posts’);

WordPress中如何设置cookie

编写WordPress插件和主题的时候,经常需要用到cookie,比如存取用户状态等,我之前编写的插件Ludou Simple Vote就用cookie来记录用户投票时间,以实现简单的防止重复投票功能。
1、在主题文件functions.php中添加以下代码,以设置cookie:

  1. /**
  2. * 函数名称,setcookie的相关参数等可以自行修改
  3. */
  4. function set_newuser_cookie() {
  5. if (!isset($_COOKIE[‘sitename_newvisitor’])) {
  6. setcookie(‘sitename_newvisitor’, 1, time()+1209600, COOKIEPATH, COOKIE_DOMAIN, false);
  7. }
  8. }
  9. add_action( ‘init’, ‘set_newuser_cookie’);
  10. // 上面一行代码也可以改成下面一行代码
  11. // add_action(‘after_setup_theme’, ‘set_newuser_cookie’);

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

  1. if (isset($_COOKIE[‘sitename_newvisitor’])) {
  2. echo ‘Welcome back!’;
  3. }
  4. else {
  5. echo ‘Hello new visitor!’;
  6. }

深圳SEOAG8游戏博客申明版权隶属:深圳SEO(/)

转载请注明:深圳SEOAG8游戏博客 WordPress操作缓存和cookie示例方法

喜欢 (2)
支付宝[]
分享 (0)
AG8游戏博主
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到