一、禁止Wordpress首页显示某个或某几个分类的文章:

修改模板目录下的index.php,在index.php中查找

<?php if (have_posts()) : ?>

在前面添加:

<?php
$limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('cat=-306&showposts=' . $limit=15 . '&paged=' . $paged);
$wp_query->is_archive = false; $wp_query->is_home = true;
?>

其中limit=15为每页显示的文章数目,cat=-306 为被排除的分类ID。

二、自定widget指定分类列表显示的内容:

修改theme目录下的function.php,使用wp提供的wp_list_categories函数,自定分类列表的显示方式,以下是本站的用法,主要是排除了306/351两个分类的显示:

if( function_exists( 'register_sidebar_widget' ) ) {   
    register_sidebar_widget(' 我的分类','mycategorys');   
}  

function mycategorys(){
    echo "<h3 class='mod'>Categories</h3><ul> ";
    wp_list_categories('exclude=306,351&orderby=&name&show_count=1&title_li=');
    echo "</ul> ";
}

WordPress是用wp_list_categories这个函数来显示分类的,其用法是:

<?php wp_list_categories('arguments'); ?>

arguments即参数,最常用的参数有:

'orderby' => 'ID', 默认ID,可选name,slug,count,term_group
'order' => 'ASC', 默认asc升序排列,可选desc
'show_count' => 0, 默认不显示分类日志数量,可选1
'child_of' => 0, 显示子分类的层数
'feed' => '', 不显示feed
'exclude' => '', 不显示该分类,排除分类,用,分割
'hierarchical' => true, 分层次显示父/子分类
'title_li' => __('Categories'), 用“Categories”为当前分类列表的标题
'depth' => 0 不限制列表深度

还有一些,懒得写了,具体还是参见wordpress的那个页面的介绍吧。参见:
http://codex.wordpress.org/Template_Tags/wp_list_categories

三、在页面内显示某个分类的文章:
复制模板目录下的index.php,另外起个名字

在最前面加上

<?php
/*
 Template Name: Page_for_special_category
*/
?>

作用是指定页面模板名称

然后找到

<?php if (have_posts()) : ?>

第一种方法:
在上面所指定的字符串前面添加

<?php query_posts('cat=306'); ?>

这样修改也是可以实现指定分类内容的调用,但是会造成无法分页。

第二种方法:
在上面所指定的字符串前面添加

<?php
$limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('cat=306&showposts=' . $limit=15 . '&paged=' . $paged);
$wp_query->is_archive = true; $wp_query->is_home = false;
?>

其中limit=15为每页显示的文章数目,cat=306 为分类的 ID。
这样修改也是可以实现指定分类内容的调用,也可以分页,但是More标签会失效

第三种方法:
在上面所指定的字符串前面添加

<?php
$limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('cat=306&showposts=' . $limit=15 . '&paged=' . $paged);
$wp_query->is_archive = true; $wp_query->is_home = false;$more = false; 
?>

这个是比较终极的修改方法,可以分页,More也不会失效,本站的“图表”栏目现在采用的就是这个办法了。

因为,按WordPress官方文档的说明,执行query_post方法后会影响在其之下的判断函数, 需要在判断函数前加上wp_reset_query重置查询函数。例如if (is_home () ) 这类的判断,不加wp_reset_query就会失效。
如果要在query_post后面正常使用more截断功能,则需要设置全局变量$more为零,即false。

上文第三种方法中的则在query_posts之后分别设置了这些判断。

$wp_query->is_archive = true; $wp_query->is_home = false;$more = false; 

WordPress的提速
=================================

第一种方法:页面静态化
Wordpress的提速网上有很多的介绍,静态化是使用最广泛的,而且分为wp-super-cache和cos-html-cache两大流派,生成静态文件的确打开速度都非常快了,但是使用了各种插件的情况,多多少少都会出现一些问题,对于我来说只要求首页能够静态化就可以了,这显然不是一个非常完善的方法,但是我需要的只是打开网站首页速度比较理想,所以也就无所谓了,内页慢就慢点吧。还是使用cos-html-cache插件,很简单的修改,以2.7.3版为例:

修改cos-html-cache.php的第102行:

if( substr_count($_SERVER['REQUEST_URI'], '.htm') || ( SCRIPT_URI == CosSiteHome) ){

if( SCRIPT_URI == CosSiteHome ){

就可以了,原理很简单,原版是判断页面地址是否包含.html选项,如果包含,则调用函数生成静态,修改后只判断是否是首页,这样就只生成首页,不生成文章页和其他页面

要注意一下cos-htm-cache的生成方式,在用户已经登录的情况下,如果发布、修改、删除文章或发表评论的时候,静态文件会被删除,此时访问首页是动态的,一定要退出登录后,第一次访问页面的时候,静态文件才会创建

第二种方法:前台不载入语言包

前台不载入语言包,提速30%,经过实际测验,这个方法提速确实非常明显。

修改方法:
打开wp-setttings.php
找到

// Load the default text localization domain.
load_default_textdomain();

// Find the blog locale.
$locale = get_locale();
$locale_file = WP_LANG_DIR . "/$locale.php";
if ( ( 0 === validate_file( $locale ) ) && is_readable( $locale_file ) )
	require( $locale_file );
unset($locale_file);

前面添加:

if( substr($_SERVER["REQUEST_URI"],0,4)=='/wp-' ){

后面添加

}

前面一句是判断页面地址的左面四个字符是/wp-,这是为了保证后台仍然载入语言包,如果你的blog不是安装唉根目录的话,在判断字符的位置要数一下。

2011/09/28:

今天Yslow了一下首页,得分99,天尚不全,这个分数已算是极致了 🙂