WordPress 排除指定分类以及不同分类显示不同内容

WordPress 如何实现循环内排除指定分类以及不同分类显示不同内容?分享来自网络搜集的代码,同时也是给自己备忘。

Wordpress 主循环外排除特定分类:

用途举例:一般 WordPress 主题的 index.php 都是输出所有分类的日志,但是对于不同的需求可以 DIY 一下,比如说你想隐藏某特定分类下的日志,让其不在首页显示,但是这又不同于私有日志,它是公开可见的。这时候就需要在 the loop 之外将此特定分类排除。

在 WordPress 默认模板中,主循环调用文章的代码格式如下:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
//主循环内容
<?php endwhile; ?>
<?php endif; ?>

默认情况下,文章调用范围为所有分类。如果排除某分类,可以使用 query_posts() 函数:

<?php query_posts(‘cat=-1’); ?>

以上代码调用除分类 ID 为 1 外的所有文章。将其插入主循环前即可。

由于 query_posts() 函数会与分页功能造成冲突,可以将 query_posts() 语句替换为:

<?php
$limit = get_option(‘posts_per_page’);
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
query_posts(‘cat=-1&showposts=’ . $limit=10 . ‘&paged=’ . $paged);
?>

若需排除特定分类,又要保持分页功能正常,则完整代码如下:

<?php
$limit = get_option(‘posts_per_page’);
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
query_posts(‘cat=-1&showposts=’ . $limit=10 . ‘&paged=’ . $paged);
?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
//主循环内容
<?php endwhile; endif; ?>

Wordpress 主循环内排除特定分类:

用途举例:如果博主希望需要根据日志分类来显示不同的广告,这时候,你就需要用到 in_category 函数,在 the loop 之内排除 WordPress 的特定日志分类。

用法如下:

<?php
if ( in_category( ‘pachoderms’ )) {
// They have long trunks…
} elseif ( in_category( array( ‘Tropical Birds’, ‘small-mammals’ ) )) {
// They are warm-blooded…
} else {
// & c.
}
?>

其他示例

<?php
if ( in_category(‘fruit’) ) {
include ‘single-fruit.php’;
} elseif ( in_category(‘vegetables’) ) {
include ‘single-vegetables.php’;
} else {
// Continue with normal Loop
if ( have_posts() ) : while ( have_posts() ) : the_post();
// …
}
?>

in_category 函数的具体用法可以参见官方文件

资料来源:http://wange.im/wordpress-exclude-category.html

WordPress网站首页如何排除指定分类文章

WordPress网站首页如何排除指定分类的文章?要做到这一点,你就需要在 The loop 中更改调用文章的函。.WordPress默认主题 Twenty Ten 和 Twenty Eleven 使用 the_post() 函数来调用所有的博客文章.
<?php while ( have_posts() ) : the_post(); ?>
the_post() 函数使用 WP_Query.我们可以使用 WP_Query 函数本身来自定义哪些文章被调用,或者哪些存档、分类、时间的文章可以显示在主页.

另外,我们还可以使用 query_posts 函数来控制 The Loop 循环.这种方法无疑是最好的,因为它并没有改变你的循环.不过,两种方法我都会讲解,你可以选择一个适合你的.
使用函数WP_Query
如果你想改变你的主页显示效果,你需要编辑你的主题index.php文件.大部分主题使用archive.php文件来作为分类(category)、时间(date)、标签(tag)的的显示页面, 所以你想更改某个存档页面只要修改archive.php文件就可以了.还有一些主题有专门的category.php、date.php、tag.php模板,修改相对应的就好.
大多数主题文件的循环会以"Start the Loop"开始.例如在Twenty Eleven主题中,看起来像这样:
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
你需要替换为以下函数:
// The Query
$query = new WP_Query( $args );
// The Loop
while ( $query->have_posts() ) : $query->the_post();
要控制哪些文章在循环中显示,你需要定义在WP_Query中的参数,即修改 $query = new WP_Query( $args );.
目前有5种参数,比较常用的是参数是 cat 和 category_name  .
若你要显示你的 tech 分类,而它的分类ID是1,那么你可以使用参数cat:
$query = new WP_Query( ‘cat=1’ );
或者你可以使用参数 category_name 来达到同样的效果:
$query = new WP_Query( ‘category_name=tech’ );
若想多添加几个分类,则需要用逗号分隔.
$query = new WP_Query( ‘cat=1,7,121’ );

$query = new WP_Query( ‘category_name=news,reviews,tutorials’ );
在分类ID前加上减号来排除某一类的所有文章.注意,不可以使用category_name 参数来排除类别.
$query = new WP_Query( ‘cat=-1’ );
在上面说过,有5种参数,我已经讲解了其中两个:cat 和 category_name,都是从你的文章列表中包含或排除某些类别.
其他三个参数是 category_and、category_in和category_not_in.
category_and显示多个分类的文章:
$query = new WP_Query( array( ‘category__and’ => array( 1, 7 ) ) );
category_in是一个or函数:
$query = new WP_Query( array( ‘category__in’ => array( 7, 127 ) ) );
排除多个类别:
$query = new WP_Query( array( ‘category__not_in’ => array( 2, 6 ) ) );
WP Query是一个非常灵活的功能函数.分类只是其中的一个参数而已,还可以使用:
Author Parameters – 显示某个作者或多个作者的文章列表,也可以排除之.
Tag Parameters – 显示或排除某些Tag的文章列表.
Taxonomy Parameters – 显示一个或多个自定义分类的文章列表..
Post & Page Parameters – 使用IDs 或 page slugs显示某些特定的文章.
Type & Status Parameters – 显示某些文章类型的文章或带有附件的文章.
Pagination Parameters – 确定每页显示的文章数量.
Offset Parameter – 文章从某哪开始显示.
Order & Orderby Parameters – 更改文章列表的排列顺序.
Sticky Post Parameters – 显示包括或排除置顶文章的文章列表.
Time Parameters – 显示某些时间段的文章.
Custom Field Parameters – 显示相关自定义字段的文章.
Permission Parameters – 显示发布的或私密的文章.
WP_Query 页面为每个参数都提供了例子,这里就不一一讲解具体用法了.
使用函数query_posts
query_posts可以非常简单的定制你在页面上显示的文章,而且你不必更改现有的循环代码.
query_posts( $args );
要使用它的功能,你就必须在你的loop循环开始之前调用它.例如:
// The Query
query_posts( $args );
// The Loop
while ( have_posts() ) : the_post();
如果你计划调用页面中的第二个循环,请确保你使用了wp_reset_query()来重置你的循环.例如:
// The Query
<?php query_posts( $args ); ?>
<?php /* Start the Loop */ ?>
   <?php while ( have_posts() ) : the_post(); ?>
    <?php get_template_part( ‘content’, get_post_format() ); ?>
   <?php endwhile; ?>
<?php wp_reset_query(); ?>
要显示某些分类的文章,你需要用到 cat 参数:
<?php query_posts( ‘cat=1,5,6’ );  ?>
同样,要排除某些分类,你需要在前面添加减号:
<?php query_posts( ‘cat=-3,-5’ );  ?>
还可以用来显示特定的文章:
query_posts( ‘p=2’ );
要定义每页显示文章的数量,你可以使用 posts_per_page 参数:
query_posts( ‘posts_per_page=5’ );
想要了解更多的信息,请访问query_posts页面.

资料来源:http://laygle.com/2012/01/wordpress-exclude-categories/

WordPress不同分类显示不同图标的方法

WordPress不同分类显示不同图标的方法。实现此功能的核心问题是,在主循环中能根据分类自动调用不同图标。而利用 get_the_category() 函数获取分类名称的代码:一段获取分类名称,一段获取分类别名。

获取当前分类的名称:

<?php foreach((get_the_category()) as $cat){echo $cat->cat_name;}?>

获取当前分类的别名:

<?php foreach((get_the_category()) as $cat){echo $cat->category_nicename;}?>

有了这两段代码,然后再组装成图片超链接代码。图片可以从主题里的文件夹获取,图片名字可以用分类的别名代替。

全套代码如下:

<a href="<?php bloginfo('url'); ?>/category/<?php foreach((get_the_category()) as $cat){echo $cat->category_nicename;}?>" title="<?php foreach((get_the_category()) as $cat){echo $cat->cat_name;}?>">
	<img src="<?php bloginfo('template_url');?>/images/<?php foreach((get_the_category()) as $cat){echo $cat->category_nicename;}?>.png" />
</a>
资料来源:http://www.mangguo.org/add-category-icon-for-wordpress/