當前位置:首頁>WordPress建站>WordPress開發(fā)>WordPress函數(shù) 之 query_posts用法匯總

WordPress函數(shù) 之 query_posts用法匯總

注:本文適合有WordPress主題制作基礎或?qū)@方面感興趣,并且喜歡動手的讀者閱讀!

WordPress函數(shù)query_posts在WordPress主題中是用于控制哪些文章可以出現(xiàn)在主循環(huán)中。

可能說主循環(huán)很多人都不懂,那么舉個例子:

首頁、存檔頁的這些文章(包括分頁中的)都是在主循環(huán)中的。在不使用query_posts函數(shù)控制的情況,首頁、存檔頁等都是按照文章的發(fā)布時間列出你博客上所有已發(fā)布的文章,而如果你想定義哪些文章可以顯示,哪些文章不顯示,文章按照什么樣的方法排序等,那么你就要用到query_posts函數(shù)了。

WordPress函數(shù)query_posts非常強大,參數(shù)無數(shù),用法更是無數(shù),下面簡單匯總一下query_posts函數(shù)的常用方法。開始之前,你可以先看看query_posts的官方文檔。看文檔對很多人來說可能會很困難,但是要成為一名優(yōu)秀的主題開發(fā)者,學會看文檔才是王道。

query_posts基本用法

首先介紹一下如何使用query_posts函數(shù)。在主題目錄下找到存檔頁面文件,存檔頁面包括index.php、archive.php等,一般分類頁、標簽頁、日期頁和作者頁等都是用archive.php。

確定了你要控制哪個頁面的文章列表,那么我們就可以開始了,比如你想讓首頁的文章按評論數(shù)排序,那么index.php中的代碼基本框架就是這樣的:

<?php

// query_posts函數(shù)
query_posts('orderby=comment_count');

// 主循環(huán)
if ( have_posts() ) : while ( have_posts() ) : the_post();
 ..
endwhile; else:
 ..
endif;

// 重置query
wp_reset_query();

?>

其實你要做的就是在index.php中查找if (have_posts())while (have_posts()),在前面添加query_posts函數(shù)即可。不過以上方式可能會導致首頁無法分頁,那你可以將query_posts函數(shù)改成這樣的行式:

// 下面這一行代碼是必須的,不然你的首頁不能分頁
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    // 這里以下面的方式添加query_posts參數(shù),具體參數(shù)可以參加官方文檔
    'orderby'   => comment_count,
    'paged' => $paged
);
query_posts($args);

下面是一些常見的query_posts函數(shù)用法,你可以直接用到你的主題中。

一、只顯示含有某個自定義字段的文章

如果你想只顯示添加了某個自定義字段的文章,并按照這個字段的值來對文章排序,那么你可以看看下面的例子:

1、打開WordPress當前主題目錄,打開index.php,搜索代碼:

while (have_posts())

將其替換成:

/**
 * 名稱:WordPress手動修改文章排列順序
 * 作者:露兜
 * 博客:http://www.ludou.org/
 * 最后修改:2010年11月14日
 */

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
    'meta_key' => 'sort',
    'orderby'   => 'meta_value_num',  // 須 WordPress 2.8 及以上版本
    'paged' => $paged,
    'order' => DESC
);
query_posts($args);
while (have_posts())

接著搜索:

endwhile;

將其改成:

endwhile;wp_reset_query();

2、給之前發(fā)表的所有文章添加自定義字段(或者稱作自定義欄目,在文章編輯頁底部可以看到),名稱為 sort ,值填數(shù)字。這樣在首頁,文章的排列順序就按照sort字段的值,從大到小排列了。通過修改sort字段的值,可以達到自定義文章排列順序的目的。

3、需要注意的是,通過以上修改后,你必須給所有文章添加自定義字段sort,否則沒有添加sort字段的文章將無法在首頁顯示。這也許就是手動排序需要付出的代價吧,要不然何謂手動?

4、如果你同時想手動修改標簽頁、分類頁等存檔頁面的文章排列順序,同樣可以按照第一步介紹的方法來操作,修改主題目錄下的archive.php等。

其實這種方式你可以看成怎樣只顯示我推薦的文章,那么含有這個自定義字段的文章就是推薦文章。

二、怎樣讓某分類的文章不顯示/顯示

如果你不想讓某分類的文章出現(xiàn)在主循環(huán)中,那么你可以使用query_posts添加參數(shù)category__not_in即可:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    // 2, 6就是你不想顯示的分類ID,多個用半角逗號隔開
    'category__not_in'   => array(2, 6),
    'paged' => $paged
);
query_posts($args);

如果只想讓顯示某個分類的文章,可以將category__not_in改成category__in。同理,如果不顯示某標簽下的文章,可以將category__not_in改成:tag__not_in,或者只想讓顯示某個標簽下的文章,可以將category__not_in改成tag__in,后面跟著標簽的ID即可。

三、如何對文章進行排序

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    // 以下代碼中的title就是orderby的值,按標題排序
    'orderby'   => title,
    'paged' => $paged
);
query_posts($args);

根據(jù)orderby的值不同,可以讓文章按照很多種方式進行排序,下面是列舉幾個常見的值及其對應的排序方式:title:按標題;date:按發(fā)布日期;modified:按修改時間;ID:按文章ID;rand:隨機排序;comment_count:按評論數(shù)

四、只顯示相應ID的文章

如我只想顯示ID為2,4,6的文章,可以使用以下代碼:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    // 以下代碼中的2,4,6就是文章的ID
    'post__in'   => array(2,4,6),
    'paged' => $paged
);
query_posts($args);

五、讓置頂文章不置頂

如果你不想讓置頂文章顯示在頂部,而是讓它們安裝正常的順序排列,那么可以使用以下代碼:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
    'paged' => $paged,
    'caller_get_posts' => 1
);
query_posts($args);

六、列出所有狀態(tài)的文章

WordPress的文章狀態(tài)有很多種,包括已發(fā)布、草稿、已刪除、私人的、定時發(fā)布的等等,如果你想將這些文章都統(tǒng)統(tǒng)顯示出來,那么可以這樣:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    'post_status' => array('publish', 'pending', 'draft', 'future', 'private', 'trash'),
    'paged' => $paged
);
query_posts($args);

post_status參數(shù)可以控制具體的文章狀態(tài),值包括pending(待審)、publish(已發(fā)布)、draft(草稿), future(定時), private(私有), trash(已刪除)。

七、控制文章的數(shù)量

如果你想控制要顯示的文章數(shù)量,可以使用showposts參數(shù):

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    // 控制只顯示10篇文章,如果將10改成-1將顯示所有文章
    'showposts' => 10,
    'paged' => $paged
);
query_posts($args);

如果你只是想控制首頁、分類頁等每各分頁顯示的文章數(shù)量,可以在WordPress管理后臺 – 設置 – 閱讀那里設置博客頁面至多顯示多少篇文章。

以上內(nèi)容轉(zhuǎn)載自露兜博客:http://www.ludou.org/wordpress_query_posts.html,非常感謝!

聲明:本站所有文章,如無特殊說明或標注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權益,可聯(lián)系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關注WordPress大學公眾號 WPDAXUE
WordPress開發(fā)

WordPress代碼 之 獲取WordPress所有分類名字和ID

2012-10-13 6:06:00

WordPress開發(fā)

WordPress友情鏈接函數(shù) wp_list_bookmarks() 詳解

2012-11-23 5:51:00

5 條回復 A文章作者 M管理員
  1. domi

    ?? 非常贊,對于像我這樣的初學者非常有用,謝謝分享。

  2. 原來是這樣控制“只顯示含有某個自定義字段的文章”,學習了,這個好像挺多地方用到的

  3. mambo

    這個還是相當強大的。

  4. wgg_ak47

    好頂贊!

  5. 學習了

?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

胶南市| 聊城市| 贵溪市| 泸西县| 临泽县| 福贡县| 正镶白旗| 清河县| 林口县| 茌平县| 霍邱县| 武邑县| 鹤岗市| 余江县| 土默特左旗| 聂荣县| 江陵县| 钟祥市| 兴宁市| 萨嘎县| 三河市| 盖州市| 庆元县| 彩票| 鞍山市| 上虞市| 金湖县| 涟水县| 安达市| 龙井市| 临清市| 体育| 临沭县| 南皮县| 盐池县| 西安市| 剑河县| 武冈市| 瑞安市| 陵川县| 合山市|