wordpress首页只显示某个分类的文章/插件实现(完美实现,附插件源码)

wordpress首页只显示某个分类的文章/插件实现(完美实现)

--------------------------------------------插件源码----------------------------------------------------------------

<?php
/*
Plugin Name: Front Page Included-only Categories
Version: 0.2
Plugin URI:
Description: This version uses a comma separated list of *included* category ids.
Author: fengyqf
Author URI: http://www.path8.net/
*/

function fpe_where($where) {
// Change the $cats_to_include string to the category id you do not want to appear on the front page.
// Example:  $cats_to_include = '1, 2, 3, 4';
$cats_to_include = '22, 26';

global $wpdb, $wp_query;

if (! $wp_query->is_home || strlen($cats_to_include) == 0) {
return $where;
}

if (empty($wpdb->term_relationships))
{
$where .= " AND $wpdb->post2cat.category_id IN (" . $cats_to_include . ")";
}
else
{
$where .= " AND $wpdb->term_taxonomy.term_id IN (" . $cats_to_include . ")";
}
return $where;
}

function fpe_join($join) {
global $wpdb, $wp_query;

if (!$wp_query->is_home) {
return $join;
}
if (empty($wpdb->term_relationships))
{
$join .= " LEFT JOIN $wpdb->post2cat ON $wpdb->post2cat.post_id = $wpdb->posts.ID ";
}
else
{
if (!preg_match("/$wpdb->term_relationships/i",$join))
{
$join .=" LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) ";
}
if (!preg_match("/$wpdb->term_taxonomy/i",$join))
{
$join .=" LEFT JOIN $wpdb->term_taxonomy ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id";
}
}
return $join;
}

function fpe_distinct($distinct) {
global  $wp_query;

if (! $wp_query->is_home ) {
return $distinct;
}
return "distinct";
}

add_filter('posts_join', 'fpe_join');
add_filter('posts_where', 'fpe_where');
add_filter('posts_distinct', 'fpe_distinct');

?>

-----------------------------------------插件源码 end-------------------------------------------------------------------

简介:

该插件是一个wordpress插件 Front Page Excluded Categories基本上稍做修改而成,在此感谢前人的工作。

使用方法:

1. 安装,就是wordpress插件安装,这里就不用说了。

2. 配置,该插件没有管理界面,直接编辑源代码进行配置,需要编辑修改的只有如下的一行。

$cats_to_include = '22, 26';

该行在上面源码中已经标红,等号右边是一个引号括起来的以逗号分隔的数字,可以有一个或者多个,我在这里配置了两个22与26。数字即是需要显示在首页分类的id编号,该数字可以在wordpress后台的编辑“文章分类目录”、编辑分类时,在浏览器地址栏url里查看到。

原理:

只要简单的懂得一点php/mysql程序知识,比较一个这里的代码与Front Page Excluded Categories的差异部分(上面代码里已经标绿)就明白了。

插件下载:

front-page-included-categories

wordpress首页只显示某个分类的文章/rewrite实现

wordpress首页只显示指定的某个分类的文章,一个比较怪的需求,网上好像很少人有这样的需求。

这个需求是这样的,您目前正常访问的这个wordpress站点http://www.path8.net, 是一个部分原创,较多的转载的技术站点;其中原创文章主要在一个分类中。原创的东西当然更希望更多多阅读,也方便跟更多人分享知识交流经验。于是设想在首页显示原创文章,这样就能实在上述目标。

但网上查找相关的资料。有人说修改程序原代码,非常不赞成这种方法,修改源码,就失去了以后升级的便捷性。

突然想到,可能使用rewrite实现,就是把“对wordpress根目录直接的访问”重写到某个指定的分类上。

于是参考wordpress的.htaccess再补习一下rewrite规则,花了两个晚上,尝试了多次,终于实现了。

.htaccess如下(其实只加了标红的那一行,22是想在首页显示的分类编号):

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /tn/
RewriteRule ^$ /tn/index.php?cat=22 [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /tn/index.php [L]
</IfModule>
# END WordPress

不过,因为本站的wordpress不是在网站目录下安装,而是在/tn目录里,所以规则可能跟你的站点不一样。如果你的wprdpress在站点根目录下安装,则把其中/tn删除应该就可以了,我没有试。

存在问题:这个方法有一个比较重大的问题,就是分页,首页显示某个分类的文章,但下面的分页,则是全站文章的分页。

如谁有更好的实现方案,请分享交流。

--------------------------------------------

其实通过以下插件实现这样功能:Front Page Category, Front Page Excluded Categories, 但效果好像并不好,如有一篇文章同属两个分类,正好这两个分类一个是允许显示在首页,另一个不允许显示在首页上的,这样情况下,这篇文章就不能显示于首页。如有篇文章属于cat=22,同时又属于cat=28, 而只有22这个分类是允许显示的,这种情况下,我需要让它显示出来,但事实上,这两个插件都不会显示这篇文章的。

------------------------------------

2010-09-26补记

“wordpress首页只显示某个分类的文章” 该功能已经实现,在探索该功能的过程中,先后用了两个方案,这里是第一个rewrite方案,正如如上面“存在问题”说的,下面是一个以wordpress插件完美实现的解决方案,

wordpress首页只显示某个分类的文章/插件实现(完美实现,附插件源码)<推荐>

推荐使用这个插件方案。该插件是一个wordpress插件 Front Page Excluded Categories基本上稍做修改而成,在此感谢前人的工作。