今天看到有WordPress博主在問“WordPress博客首頁如何排除指定分類的文章?”。用戶為什么想這樣做的原因有很多,也許你不希望在首頁上顯示上顯示自己生活類的文章,而只顯示一些新聞類的文章。
要做到這一點,你就需要在 The loop 中更改調(diào)用文章的函數(shù)。WordPress默認(rèn)主題 Twenty Ten 和 Twenty Eleven 使用 the_post() 函數(shù)來調(diào)用所有的博客文章。
<?php while ( have_posts() ) : the_post(); ?>
the_post() 函數(shù)使用 WP_Query。我們可以使用 WP_Query 函數(shù)本身來自定義哪些文章被調(diào)用,或者哪些存檔、分類、時間的文章可以顯示在主頁。
另外,我們還可以使用 query_posts 函數(shù)來控制 The Loop 循環(huán)。這種方法無疑是最好的,因為它并沒有改變你的循環(huán)。不過,兩種方法我都會講解,你可以選擇一個適合你的。
使用函數(shù)WP_Query
如果你想改變你的主頁顯示效果,你需要編輯你的主題index.php文件。大部分主題使用archive.php文件來作為分類 (category)、時間(date)、標(biāo)簽(tag)的的顯示頁面, 所以你想更改某個存檔頁面只要修改archive.php文件就可以了。還有一些主題有專門的category.php、date.php、 tag.php模板,修改相對應(yīng)的就好。
大多數(shù)主題文件的循環(huán)會以“Start the Loop”開始。例如在Twenty Eleven主題中,看起來像這樣:
<?php /* Start the Loop */ ?> <?php while ( have_posts() ) : the_post(); ?>
你需要替換為以下函數(shù):
// The Query $query = new WP_Query( $args ); // The Loop while ( $query->have_posts() ) : $query->the_post();
要控制哪些文章在循環(huán)中顯示,你需要定義在WP_Query中的參數(shù),即修改 $query = new WP_Query( $args );.
目前有5種參數(shù),比較常用的是參數(shù)是 cat 和 category_name 。
若你要顯示你的 tech 分類,而它的分類ID是1,那么你可以使用參數(shù)cat:
$query = new WP_Query( 'cat=1' );
或者你可以使用參數(shù) category_name 來達(dá)到同樣的效果:
$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 參數(shù)來排除類別。
$query = new WP_Query( 'cat=-1' );
在上面說過,有5種參數(shù),我已經(jīng)講解了其中兩個:cat 和 category_name,都是從你的文章列表中包含或排除某些類別。
其他三個參數(shù)是 category_and、category_in和category_not_in。
category_and顯示多個分類的文章:
$query = new WP_Query( array( 'category__and' => array( 1, 7 ) ) );
category_in是一個or函數(shù):
$query = new WP_Query( array( 'category__in' => array( 7, 127 ) ) );
排除多個類別:
$query = new WP_Query( array( 'category__not_in' => array( 2, 6 ) ) );
WP Query是一個非常靈活的功能函數(shù)。分類只是其中的一個參數(shù)而已,還可以使用:
- Author Parameters – 顯示某個作者或多個作者的文章列表,也可以排除之。
- Tag Parameters – 顯示或排除某些Tag的文章列表。
- Taxonomy Parameters – 顯示一個或多個自定義分類的文章列表。.
- Post & Page Parameters – 使用IDs 或 page slugs顯示某些特定的文章。
- Type & Status Parameters – 顯示某些文章類型的文章或帶有附件的文章。
- Pagination Parameters – 確定每頁顯示的文章數(shù)量。
- Offset Parameter – 文章從某哪開始顯示。
- Order & Orderby Parameters – 更改文章列表的排列順序。
- Sticky Post Parameters – 顯示包括或排除置頂文章的文章列表。
- Time Parameters – 顯示某些時間段的文章。
- Custom Field Parameters – 顯示相關(guān)自定義字段的文章。
- Permission Parameters – 顯示發(fā)布的或私密的文章。
WP_Query 頁面為每個參數(shù)都提供了例子,這里就不一一講解具體用法了。
使用函數(shù)query_posts
query_posts可以非常簡單的定制你在頁面上顯示的文章,而且你不必更改現(xiàn)有的循環(huán)代碼。
query_posts( $args );
要使用它的功能,你就必須在你的loop循環(huán)開始之前調(diào)用它。例如:
// The Query query_posts( $args ); // The Loop while ( have_posts() ) : the_post();
如果你計劃調(diào)用頁面中的第二個循環(huán),請確保你使用了wp_reset_query()來重置你的循環(huán)。例如:
// 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 參數(shù):
<?php query_posts( 'cat=1,5,6' ); ?>
同樣,要排除某些分類,你需要在前面添加減號:
<?php query_posts( 'cat=-3,-5' ); ?>
還可以用來顯示特定的文章:
query_posts( 'p=2' );
要定義每頁顯示文章的數(shù)量,你可以使用 posts_per_page 參數(shù):
query_posts( 'posts_per_page=5' );
想要了解更多的信息,請訪問query_posts頁面。
使用插件來排除某些分類的文章
對于那些對代碼不太感冒的朋友,也可以使用WordPress插件。這里建議使用Simply Exclude和Ultimate Category Excluder。
Simply Exclude可以讓你在首頁、歸檔頁、搜索頁、RSS中排除或包含某些分類、作者、標(biāo)簽的文章,使用起來也非常簡單。
Ultimate Category Excluder,能讓你容易的排除某些分類在主頁、存檔頁和RSS中。不同于Simply Exclude的是他只能排除某些分類,不能排除作者、標(biāo)簽等。
總結(jié)
雖然Simply Exclude和Ultimate Category Excluder插件都很不錯,但如果你有一定的編程基礎(chǔ),那么你還是手動修改吧。
原文:http://laygle.com/2012/01/wordpress-exclude-categories/