让 Google Sitemaps Generator 可以忽略指定的日志分类
在之前使用 HemingwayEx 主题的时候我把一些只有半句或几句话的日志移动到了 asides 分类,而现在我不想让 Google Sitemaps Generator 插件生成 sitemap 的时候包括这些日志,也许只有我才会有这样奇怪的需求 😯 。
可 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;
2. 打开主题目录下的 functions.php
文件,添加一下代码:
function sitemap_exclude_categories($where) {
global $wpdb;
$cates = array(11); // 在这里指定要忽略的类别id,多个类别id用半角逗号分隔
if (count($cates) > 0) {
$table_posts = $wpdb->posts;
$exclude = "(NOT EXISTS (
SELECT r.object_id FROM {$wpdb->term_relationships} r
INNER JOIN {$wpdb->term_taxonomy} t ON r.term_taxonomy_id = t.term_taxonomy_id
WHERE t.taxonomy = 'category' AND t.term_id IN (".join(',', $cates).") AND r.object_id = `".$table_posts."`.ID
))";
$where = $exclude.' AND '.$where;
}
return $where;
}
add_filter('sitemap_exclude_categories', 'sitemap_exclude_categories');
通过 WordPress 自身提供的 Hook API 来实现功能主要是为了尽可能避免过多地修改原插件的代码,以免插件升级时带来麻烦。现在这样升级插件时只要重做第一步就可以了。
UPDATE @ 2009-3-22
最新版本的 Google XML Sitemaps 插件增加了日志分类过滤功能,不过由于它会将被过滤分类下的所有日志 ID 都取出来然后用 NOT IN 来实现过滤,这样在日志数多的情况下效率不高。
Comments
问一下 ASIDE功能手动可以添加不…. 😳
我的评论又被过滤了…….晕
@Qsar:
看样子你的URL被 askismet 误列为黑名单了
ASIDE功能的实现有多种方式,通过插件或者手动指定一个分类的内容作为asides,在侧栏显示这个分类的内容即可,当然显示代码要自己写了
Leave a Reply