當(dāng)前位置:首頁(yè)>WordPress建站>WordPress開(kāi)發(fā)>如何創(chuàng)建WordPress自定義查詢

如何創(chuàng)建WordPress自定義查詢

大家都知道,輸入到WordPress的所有數(shù)據(jù)都將被保存在數(shù)據(jù)庫(kù)中,如果我們需要這些數(shù)據(jù),就要對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢,然后輸出我們需要的數(shù)據(jù)。比如我們需要在首頁(yè)輸出網(wǎng)站的最新文章,或者在分類頁(yè)面輸出該分類的最新文章,又或者在文章頁(yè)面輸出詳細(xì)的文章內(nèi)容……

查詢數(shù)據(jù)庫(kù)的方法很多,較常用的有以下3種:使用pre_get_posts 動(dòng)作、 query_posts() 函數(shù) 或 WP_Query 類。

pre_get_posts 動(dòng)作

當(dāng)你查詢數(shù)據(jù)庫(kù)的時(shí)候,Wordpress創(chuàng)建了一個(gè)全局變量 $query 。使用動(dòng)作 pre_get_posts 就可以獲取 $query 變量并將其作為參數(shù)傳遞給回調(diào)函數(shù)。

要知道,pre_get_posts 可以用來(lái)獲取所有的數(shù)據(jù)庫(kù)信息,包括后臺(tái)管理區(qū)域,而且它可以多次使用,所以要獲取我們想要的數(shù)據(jù),我們需要對(duì)它進(jìn)行判斷檢查。要檢查是否正在改變主查詢,我們可以使用函數(shù) is_main_query()

if(is_main_query())
{
     // Modify the query
}

盡管這樣,它還是會(huì)在后臺(tái)管理區(qū)域中被獲取,所以你還需要檢查是否在你希望的頁(yè)面輸出,比如,你要修改分類頁(yè)面的查詢,你就需要添加 is_category() 函數(shù)。

if(is_main_query() && is_category())
{
     // Modify the query
}

例如,如果你希望在首頁(yè)查詢中排除某些分類,你可以向下面一樣修改查詢:

add_action( 'pre_get_posts', 'exclude_category' );
function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() && ! $query->get( 'cat' ) ){
        $query->set( 'cat', '-5' );
    }
}

你還可以通過(guò)修改 posts_per_page 參數(shù)來(lái)修改通過(guò)查詢獲取的文章篇數(shù)

add_action( 'pre_get_posts', 'get_one_post' );
function get_one_post( $query ) {
    if ( $query->is_home() && $query->is_main_query() ){
        $query->set( 'posts_per_page', 1 );
    }
}

posts_per_page  是用來(lái)修改WordPress默認(rèn)的查詢的,如果你需要添加額外的查詢,你就需要使用 WP_Query 類。

query_posts() 函數(shù)

query_posts() 是修改WordPress主查詢的另一種方法,這是最簡(jiǎn)單的編輯數(shù)據(jù)庫(kù)查詢的方法,因?yàn)樗鼤?huì)覆蓋默認(rèn)的 $query 變量。但 query_posts() 不是最好的,也不是最有效的方法,更好的方式還是使用  posts_per_page 來(lái)修改主查詢。

就像 posts_per_page 一樣,你可以使用 query_posts()  來(lái)修改返回的文章數(shù)量,默認(rèn)情況下,WordPress會(huì)返回 10 篇文章,你可以使用下面代碼修改為 1 篇:

<?php
query_posts( 'posts_per_page=1' );
while ( have_posts() ) : the_post();
	echo '
<h1>';
	the_title();
	echo '</h1>
';
endwhile;
?>

了解更多,請(qǐng)閱讀 WordPress函數(shù):query_posts

WP_Query 類

WP_Query 類 定義在 wp-includes/query.php 文件中,它是一個(gè) 類(class),用來(lái)查詢數(shù)據(jù)庫(kù)然后在我們想要的頁(yè)面輸出文章。WP_Query 會(huì)創(chuàng)建一個(gè)可以用在任何頁(yè)面的變量 $wp_query ,你可以通過(guò)多種方式來(lái)獲取查詢的信息。

最主要的方式是 $wp_query->have_posts() ,它可以在循環(huán)的內(nèi)部被 have_posts() 函數(shù)調(diào)用。你可以通過(guò) the_post() ,在循環(huán)的內(nèi)部使用這個(gè)變量來(lái)獲取當(dāng)前文章的信息。

$new_query = new WP_Query( $args );
// The Loop
while ( $new_query->have_posts() ) :
	$new_query->the_post();
	printf('
<h1>%s</h1>
', get_the_title() );
endwhile;

WP_Query 類 還可以用來(lái)二次查詢數(shù)據(jù)庫(kù),但你需要使用 wp_reset_postdata() 函數(shù) 來(lái)重置前一個(gè)查詢。

$new_query = new WP_Query( $args );
// The Loop
while ( $new_query->have_posts() ) :
	$new_query->the_post();
	printf('
<h1>%s</h1>
', get_the_title() );
endwhile;
 wp_reset_postdata();
$second_query = new WP_Query( $second_args );
// The Loop
while ( $second_query->have_posts() ) :
	$second_query->the_post();
	printf('
<h1>%s</h1>
', get_the_title() );
endwhile;
 wp_reset_postdata();

在 WordPress官方文檔中,介紹了不同的參數(shù)和方法,更多詳情請(qǐng)?jiān)L問(wèn) WP_Query 類。

  • 參考資料:http://www.paulund.co.uk/how-to-create-custom-queries-in-wordpress
  • 編譯:倡萌@WordPress大學(xué) – 如何創(chuàng)建WordPress自定義查詢
  • 聲明:本站所有文章,如無(wú)特殊說(shuō)明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書(shū)籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

    給TA打賞
    共{{data.count}}人
    人已打賞
    歡迎關(guān)注WordPress大學(xué)公眾號(hào) WPDAXUE
    WordPress開(kāi)發(fā)

    WordPress函數(shù):query_posts(查詢文章)

    2013-4-9 10:35:15

    WordPress開(kāi)發(fā)

    啟用WordPress主題或插件后自動(dòng)跳轉(zhuǎn)到設(shè)置頁(yè)面

    2013-4-11 8:30:30

    3 條回復(fù) A文章作者 M管理員
    1. 你好!請(qǐng)教一下,在文章里插入的代碼,顯示的樣式是怎么實(shí)現(xiàn)的?是用插件,還是用手寫(xiě)代碼。謝謝

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

    西吉县| 宜城市| 山东| 南通市| 南充市| 阳朔县| 成都市| 天水市| 绥芬河市| 民县| 西畴县| 伊吾县| 织金县| 新源县| 新河县| 平遥县| 玉龙| 财经| 观塘区| 志丹县| 海晏县| 梨树县| 唐山市| 景东| 灵台县| 赫章县| 临朐县| 南汇区| 灌云县| 澄城县| 商南县| 厦门市| 清徐县| 合水县| 乐山市| 滕州市| 涞水县| 邵阳市| 沙河市| 社旗县| 白城市|