Wordpress修改之使用ocp自动更新页面缓存

2013.08.08发布于代码暂无评论/目录

记录将wordpress打造成一个伪静态博客的编码过程,包括用到的资源和遇到的问题等。

用到的工具

修改ocp

ocp的源码在这里,修改后的源码在这里。修改的内容包括:

  1. 添加两个命令行选项:
    • -u 当sitemap里url的最后修改时间(lastmod)大于本地缓存的最后修改时间(atime)时,本地缓存视为过期,并更新本地缓存。
    • -rl 当使用-u选项并在本地缓存过期时,删除列表中的缓存文件或文件夹。列表使用一个半角逗号(,)隔开,中间不要加空格等其余的字符。
  2. 让ocp能够识别sitemap里的lastmod并与页面缓存的atime进行比较,比较的时候因为时区不同遇到了这个问题

修改Google Sitemaps V3 for qtranslate

插件的发布页在这里,修改的版本为3.2.8.1,源码放在这里,3.2.8.1版本的patch放在这里。修改的内容包括:

  1. 输出Category和Tag页面的最后修改时间(lastmod)。
  2. 参考这篇文章,修正时区问题。在sitemap-core.php的函数

GetTimestampFromMySql中,将之前获得的last_modified_gmt时间加上gmt_offset即可。

配置cron job

crontab设置如下,每天凌晨3点30分自动更新缓存,每周末凌晨清空所有缓存并更新。 30 03 * * * /root/bin/update-wp-cache.sh 30 03 * * 7 /root/bin/update-wp-cache.sh purgeAll update-wp-cache.sh脚本如下。

#!/bin/sh

# update wordpress page cache for w3tc with ocp
# ocp - Optimus Cache Prime from http://patrickmylund.com/projects/ocp/

# sitemap.xml generated by google sitemaps v3 for qtranslate http://wordpress.org/extend/plugins/google-xml-sitemaps-v3-for-qtranslate/
# ocp modified for w3tc https://github.com/wilbur-ma/ocp

# google sitemaps v3 for qtranslate modified for w3tc https://github.com/wilbur-ma/wordpress-tweak/tree/master/google-xml-sitemaps-v3-for-qtranslate

purgeAllArg='purgeAll'
localCacheDir=/var/www/wordpress3/wp-content/w3tc/pgcache
sitemapPath=/var/www/wordpress3/sitemap.xml
ocpPath=/root/bin/ocp 
archiveDir=$localCacheDir/archives   # 使用插件的short code生成的archives页面必须手动删除,否则不会更新
sitemapDir=$localCacheDir/sitemap    # 使用插件生成的sitemap页面必须手动删除,否则不会更新

# remove archive page and sitemap page manually

if [ $# -ge 1 ] && [ $1 = $purgeAllArg ]
then 
    echo "Remove all the page cache..."
    rm -Rf $localCacheDir/*
else
    echo "Remove archive page and sitemap page..."
    rm -Rf $archiveDir $sitemapDir
fi
# update cache with ocp

echo "Update page cache with ocp..."
$ocpPath -u -rl "_index.html,_index.html_gzip,page" -v -l $localCacheDir -ls _index.html $sitemapPath

遇到的问题

记录编码过程中遇到的问题。

Wordpress时区问题

获取post的最后修改时间post_modified_gmt后应当加上gmt_offset才是实际时间,或者直接使用post_modified函数。

$post->post_modified_gmt + get_option('gmt_offset') * 3600

注意事项

使用插件生成的页面(page)需要手动删除其缓存

一些使用插件生成的页面,比如文章存档和网站地图等,需要手动删除缓存。

删除文章或页面时无法自动删除对应的缓存

人为删除文章(post)和页面(page)后,ocp无法删除对应的页面缓存,也无法更新包含删除文章或页面的缓存(比如文章存档,月归档,标签和文章分类页面)等,此时需要手动删除对应的页面缓存。

阅读资料

#golang#ocp#php#wordpress

评论