Tag Archive for 'WordPress'

WordPress 的 Hook 机制在 Discuz 二次开发中的应用

Posted on 2009-05-02 in Web DevelopmentComments

最近工作需要对 Discuz 做二次开发,本着最小化改动方便以后升级的原则,我引入了 WordPress 的 Hook 机制(即 Plugin API)来降低二次开发代码与 Discuz 原生代码的耦合度。

WordPress 内部提供了许多 Hook(钩子),以便插件可以将相应的 action 或 filter 挂接上去接管或改进 WordPress 的默认处理来达到自己期望的目的,在处理完毕后将控制权重新交给 WordPress。而我们所要做的就是将这种机制移植到 Discuz 中,所幸的是,WordPress 的 Hook 机制并没有过多地依赖于它的其它核心程序,所以基本不需要做多少修改就可以拿来使用。
Continue reading...

At Reply Mail Notification 1.0 Release

Posted on 2009-04-15 in Blog RelatedComments

终于将 At Reply Mail Notification 的后台回复功能加上,这样看起来算是一个插件了。不过没有提供后台插件管理选项,觉得没有这个必要,因为相关设置不多且修改频繁度并不会太高。先上截图:

HTML 模版:
mail_template_html
Continue reading...

LBS 转 WordPress 不完全记录

Posted on 2009-03-22 in Blog RelatedComments

早就答应 Cure 要帮他把博客从 LBS 转到 WordPress,事实上从他的闪光花园开始长了杂草之后,我就一直鼓动他转到 WordPress 下。或许是一直借口太忙了又或是自我标榜的“完美主义”在作怪,总之断断续续拖拖拉拉,从一月份一直到前些日子才将闪光花园的 LBS 主题改写成 WordPress 版本的,基本上了保留了原貌,用 Cure 的话说和之前没什么两样。尝试用了下 CSS Sprite,把一大堆不同类的背景图片弄到一起看起来是个失误,不过暂时也懒得改了。

ACCESS TO MySQL
数据转换费了一些周折。找了个工具叫 Bullzip MS Access to MySQL,在 XP 下却不能正常使用,提示“Error in function 'cmdNext_Click'”之类的错误。官方论坛有人说是 ADO 不存在的缘故,不过折腾了半天问题照旧。后来在安装了 SQL SERVER 的WIN2003系统下成功将数据 Dump 成 SQL 文本,可中文却是乱码,崩溃。最后还是用了月光转换软件搞定,不过月光的软件不会生成创建表结构的语句,所以还是两者结合了一下,才将 LBS 数据转到 MySQL 下。
Continue reading...

WordPress 糟糕的重复评论检测方式

Posted on 2009-01-22 in Blog RelatedComments

去旧空间清理文件时,用 FTP 拉下一大堆 mysql slow queries 日志。由于我的博客平时几乎没什么人来访问,所以我也没怎么去关心是否存在 mysql slow queries。看了下日志,发现绝大部分 slow query 都是由 WordPress 的重复评论检测造成成的:

wp_comment_mysql_slow_queries

没想到居然直接用 Text 类型的 comment_content 字段来判断评论重复,太衰了。开始还怀疑是不是日志搞错了,于是找到相应的代码确认: Continue reading...

At Reply Mail Notification 测试贴

Posted on 2009-01-19 in Blog Related28 Comments

想给博客加上访客留言被回复时邮件通知留言者的功能,本不想折腾,只不过试用了几个插件,都觉得不尽满意,便自己写了一个,先实现了几个功能:

  • 访客可以针对每篇日志选择是否接收邮件通知
  • 访客可以针对每篇日志选择接收何种评论通知
  • 访客可以点击邮件底部的链接取消邮件通知

对于使用 @+留言者 形式的回复暂未作邮件通知,需点击留言者名称右边的小图标 reply icon 回复。回复通知只对即日起的新留言有效。

欢迎在此留言,灌水。

让 WordPress 自动删除 Post Revisions

Posted on 2008-11-18 in Blog RelatedComments

貌似在 wp-config.php 中加入 define(’WP_POST_REVISIONS’, false); 来禁用 WordPress 的日志修订功能,post revision 还是会产生。gohsy 同学写了个插件 Revision Manager 来清理 post revision,不过个人觉得手动清理还是不够方便,决定利用 WordPress 的计划任务功能(WP_Cron)偷偷懒。

不想为了这小小的功能而多添加一个插件,所以在主题目录下的 functions.php 文件添加了以下代码:

function delete_post_revisions() {
  global $wpdb;
 
  // Also need to delete the post meta and term relationships
  $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id IN (SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision')");
  $wpdb->query("DELETE FROM {$wpdb->term_relationships} WHERE object_id IN (SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision')");
 
  // Delete the post revisions
  $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
}
 
// Register the event
add_action('delete_post_revisions_event', 'delete_post_revisions');
if (!wp_next_scheduled('delete_post_revisions_event')) {
  wp_schedule_event(time(), 'daily', 'delete_post_revisions_event');
}

Continue reading...

让 Google Sitemaps Generator 可以忽略指定的日志分类

Posted on 2008-11-15 in Blog RelatedComments

在之前使用 HemingwayEx 主题的时候我把一些只有半句或几句话的日志移动到了 asides 分类,而现在我不想让 Google Sitemaps Generator 插件生成 sitemap 的时候包括这些日志,也许只有我才会有这样奇怪的需求 :shock:

可 Google XML Sitemaps 只能忽略指定的日志或页面,而不能忽略整个分类,所以只能自己动手了。

1. 打开插件目录下的 sitemap-core.php 文件,找到:

$where.=" AND post_password='' ORDER BY post_modified DESC";
 
$sql .= $where;

修改成:

$where.=" AND post_password='' ORDER BY post_modified DESC";
$where = apply_filters('sitemap_exclude_categories', $where);
$sql .= $where;

Continue reading...

WordPress 分页文章静态化的更优解决方案

Posted on 2008-11-12 in Blog Related76 Comments

之前用比较暴力的方式实现了分页文章的静态化,不过这样一来升级 WordPress 就不太方便了。厌烦了每次升级都要修改源文件,于是利用 WordPress 本身提供的接口实现了更好的解决方案。

/%year%/%monthnum%/%postname%.html这样的永久链接结构为例:

1. 打开主题目录下的functions.php文件,添加以下代码:

// 添加分页处理规则
function add_custom_post_rewrite_rules($rules) {
  $custom_rules = array(
    '([0-9]{4})/([0-9]{1,2})/([^/]+)-([0-9]+)\.html$' => 'index.php?year=$matches[1]&monthnum=$matches[2]&name=$matches[3]&page=$matches[4]',
  );
  $rules = array_merge($custom_rules, $rules);
 
  return $rules;
}
add_filter('post_rewrite_rules', 'add_custom_post_rewrite_rules');
 
// 修改分页链接
function my_wp_link_pages($args = '') {
  $args .= ($args ? '&' : '') . 'echo=0';
  $links = wp_link_pages($args);
  $links = preg_replace_callback('|([0-9]{4}/[0-9]{1,2}/)([^/]+)(\.html)(/)([0-9]+)|', 'custom_page_link', $links);
 
  echo $links;
}
 
function custom_page_link($matches) {
  return $matches[1].$matches[2].'-'.$matches[5].$matches[3];
}

Continue reading...

升级到 WordPress 2.6

Posted on 2008-07-16 in Blog RelatedComments

好久没写博客了,出来冒个泡。最近状态比较低迷,半死不活中……

升级到 WordPress 2.5 RC1

Posted on 2008-03-20 in Blog RelatedComments

忍不住登上服务器将 WordPress 升级到 2.5 RC1,还算顺利。感觉后台速度有所提高,不知道真的是后台速度提升了还是网速提升了(这两天 ping 延时破天荒地小于 300 ms)。

后台色调较之前明快了许多,不过我更喜欢经典色调,看上比较舒服;FF、Safari 下可以看到漂亮的圆角按钮,IE、Opera 便无福消受了。

使用的插件大部分工作正常,不过由于 WordPress 2.5 修改了 COOKIE 设置,用 AUTH_COOKIE 替代了原先的 USER_COOKIE 和 PASS_COOKIE,这使得 cos-html-cache 无法正常工作,需要做些简单的修改。貌似 RSS 全文输出不受 more 标签影响了,看来 Full Text Feed 插件该退役了。

发现 WordPress 2.5 去掉了 gzip 压缩,不知道出于什么原因。WordPress 2.5 还改进更改了内置的缓存机制,替代了之前基于文件的缓存机制而完全基于内存操作。只不过这个新的缓存机制并不能有效降低数据库负载,如同鸡肋一般。另外,在循环中执行查询这个严重影响效率的该拍砖头扔臭鸡蛋的环节仍旧没有得到有效改善。