如何在WordPress中使用WP_Query類別?
已發表: 2024-08-09什麼是 WP_Query?
WP_Query
是 WordPress 中功能強大的 PHP 類,它允許您建立對資料集的自訂查詢,以檢索貼文和其他內容並將其呈現在頁面上。它提供了一種靈活有效的方式來與資料庫互動並根據各種標準獲取內容。
關於 WP_Query 的簡短說明
您可能知道 WordPress 將所有網站資料(例如貼文、頁面、評論或設定)儲存在 MySQL 資料庫中。
因此,對於訪問您網站的任何人,請求都會立即發送到此資料庫,檢索所請求的數據,無論是要在螢幕上顯示的帖子還是頁面。
但您一定會驚訝地發現,在 WP_Query 的幫助下,您可以建立可以幫助您從資料庫中檢索特定資訊的查詢。因此,每當有人搜尋您的內容時,WordPress 都會使用這個內建類別。
毫無疑問,您仍然可以使用 SQL 來編寫所有這些查詢,但這相當困難,而且不是最簡單的方法。另一方面,WP_Query 更容易。
WP_Query 非常有用,您可以建立自訂查詢來在您的網站上顯示特定內容,而無需訪客進行搜尋。
簡而言之,WP_Query 是一個工具,可以讓開發人員更輕鬆地控制 WordPress 網站上顯示的內容及其外觀,而無需編寫複雜的程式碼。
假設您在 WordPress 中創建了一種特殊類型的內容,稱為「部落格」。要在您的網站上顯示這些「部落格」帖子,您可以使用 WP_Query 編寫特殊查詢。
// WP QUERY
$query = new WP_Query([
'post_type' => 'blog', // Type of content
'posts_per_page' => 6, // Number of posts to show
'category_name' => 'Entertainment' // Category filter
]);
現在為了顯示請求的查詢,WP_Query 提供了快捷方式和內建函數來幫助您自訂循環。 Loop 是 WordPress 用來在頁面上顯示貼文的一段 PHP 程式碼。
WordPress 根據您在 WP_Query 中設定的條件(例如貼文類型、貼文數量和類別)處理每個貼文並設定其格式。
這個強大的工具可以幫助開發人員輕鬆自訂 WordPress 主題顯示內容的方式,而無需編寫複雜的資料庫查詢
如何利用 WP_Query?
現在您知道什麼是 WP_Query 以及它到底做什麼。讓我們看看您可以利用這個強大工具的不同案例場景。
1.在WP_Query中建立循環
首先,你應該了解什麼是循環。它是 WordPress 的一部分,能夠高度回應從數據中獲取貼文資料並將其顯示在您的網站上。它主要側重於根據主題模板決定內容的外觀。
循環可以在網站上顯示什麼?
根據您選擇的設置,循環可以顯示:
- 自訂帖子類型和自訂字段
- 在主頁上發布標題和簡短描述
- 單一貼文的內容和評論
- 使用模板標籤的各個頁面的內容
為了讓您更好地理解,以下是 Loop 的簡單結構。
基本循環範例
<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Display post content
endwhile;
endif;
?>
- 這裡,
have_posts()
函數會檢查是否有可用的貼文。 -
while ( have_posts() ) : the_post();
:如果有帖子,此循環將為每個帖子運行並顯示其內容。
使用 WP_Query 自訂循環
有時,您不想顯示所有貼文。您可以使用 WP_Query 自訂顯示的內容:
<?php
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// No posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>
這個自訂循環是如何運作的
- 設定查詢:
$the_query = new WP_Query( $args );
根據您設定的參數(如貼文類型、類別等)建立自訂查詢。 - 執行循環:
if ( $the_query->have_posts() ) { ... }
檢查是否有與您的查詢相符的貼文。如果有,它會在列表中顯示每個帖子的標題。 - 重置帖子資料:
wp_reset_postdata();
確保在自訂循環運行後恢復原始發布資料。
自訂選項
使用 WP_Query,您可以:
- 顯示特定類別、作者或日期範圍的帖子
- 顯示帶有某些標籤或自訂欄位的帖子
2. WP_Query 參數
當您想要從 WordPress 網站取得特定貼文時,您需要建立 WP_Query,為此,您需要包含四個基本部分:
- 查詢參數:告訴 WordPress 要檢索哪些資料。
- 查詢:使用參數來取得資料。
- 循環:處理並顯示每個帖子。
- 資料重置後:循環運行後重置資料。
但 WP_Query 最基本的元件之一是參數(通常稱為 WP_Query args),它負責提取您想要從資料庫中取得的特定貼文。
非常重要的是,參數設定條件以僅顯示某些帖子,而不是顯示所有帖子。
論證的例子
$args
行:這是包含查詢參數的位置。- 結構:將某些參數放入陣列中。這是一個基本範例,
$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);
具體例子
如果您想顯示帶有“WordPress 錯誤”標籤的帖子,您可以像這樣設定查詢參數:
$query = new WP_Query( array( 'tag' => 'WordPress Errors' ) );
為什麼論證很重要
- 無參數,無內容:如果您不包含 WP_Query 參數,WordPress 將不知道要顯示哪些貼文。您的查詢不會從資料庫中取得任何內容。
3.設定WP_query參數
參數使 WP_Query 變得有用且強大。由於可用的資料庫種類繁多,任何人都可以輕鬆過濾掉資料庫搜尋。
例如,當您想要在 WordPress 網站上顯示特定帖子時,您可以使用 WP_Query 並確保獲得正確的帖子,您可以設定參數。您可能還有一個問題:什麼是參數?
嗯,參數就像指令一樣,告訴 WordPress 從資料庫取得什麼樣的貼文。
常用參數範例
以下是您可以使用的一些常用參數:
- cat :顯示特定類別的貼文。
- 作者:顯示一位或多位特定作者的貼文。
- post_status :顯示正在進行、規劃、發布或刪除的貼文。
- orderby :按作者、貼文類型、日期等對貼文進行排序。
- posts_per_page :設定要顯示的貼文數。
- tag :顯示特定標籤的貼文。
- order :按升序或降序對帖子進行排序。
- post_type :定義是否顯示貼文、頁面或自訂貼文類型。
如何使用參數
如果你想顯示某個類別的帖子,可以使用category_name
參數。這是一個例子:
$query = new WP_Query( array( 'category_name' => 'WordPress' ) );
這將顯示「員工」類別和任何子類別中的所有貼文。
更複雜的例子
在此範例中,我們示範如何利用不同參數中的多個值來建立複雜的自訂查詢來取得您想要的確切貼文。
我們將檢索屬於特定類別、具有特定標籤、由特定作者撰寫並按日期降序排列的貼文。
$args = array(
'category__in' => array(5, 10), // Categories with IDs 5 and 10
'tag__in' => array('featured', 'popular'), // Posts tagged with 'featured' or 'popular'
'author__in' => array(1, 2), // Authors with IDs 1 and 2
'orderby' => 'date', // Order by date
'order' => 'DESC', // In descending order
'posts_per_page' => 10 // Limit to 10 posts
);
$query = new WP_Query($args);
// The Loop
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Display post content
the_title('<h2>', '</h2>');
the_excerpt();
}
} else {
// No posts found
echo 'No posts found';
}
// Restore original Post Data
wp_reset_postdata();
- category__in :幫助指定我們想要來自 ID 為 5 和 10 的類別的貼文。
- tag__in :指定我們希望貼文標記為「特色」或「熱門」。
- author__in :指定我們想要 ID 為 1 和 2 的作者發布的貼文。
- orderby :指定我們要按帖子的發布日期對帖子進行排序。
- order :指定我們希望貼文按降序排列(最新的在前)。
- posts_per_page :將檢索到的貼文數量限制為 10。
4. 使用方法和類別屬性修改對象
在 WordPress 中, WP_Query
是一個特殊的 PHP 類,用於從資料庫檢索貼文。將其視為一種工具,可以幫助您獲取想要在網站上顯示的確切貼文。
什麼是類別屬性和方法?
在 PHP 中,類別可以具有屬性(如變數)和方法(如函數)。這是理解它們的簡單方法:
- 屬性:它們就像是保存資訊的容器。在
WP_Query
的上下文中,屬性可能包括貼文清單或找到的貼文數量等內容。 - 方法:這些就像您可以執行的工具或操作。在
WP_Query
中,方法可以幫助您檢查是否有貼文、取得貼文的標題或重設查詢。
可以直接更改屬性嗎?
不,您不能直接更改屬性,即使開發人員也強烈反對這樣做,但您可以選擇使用方法。
方法就像官方工具或命令一樣,可以幫助您遵循正確的方法。這些正是像函數一樣運作的,當您對 WP_Query 的方法進行某些變更時,您也可以自訂所取得的資料。
在 WP_Query 中使用方法的範例
在此範例中,reset_postdata() 函數可能是編寫 WP_Query 的關鍵步驟。此方法將重設 $current_post 和 $post 的屬性。
<?php
// Create a new query with specific arguments
$the_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 5,
'category_name' => 'news',
));
?>
<?php if ($the_query->have_posts()) : ?>
<!-- Display the posts -->
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<p><?php the_excerpt(); ?></p>
<?php endwhile; ?>
<!-- Reset the post data to avoid conflicts -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
分解:
- 建立查詢:
-
$the_query = new WP_Query($args);
:它使用您提供的參數來建立一個新的WP_Query
物件。
-
- 檢查帖子:
-
if ($the_query->have_posts())
:它檢查是否有任何基於您的查詢要顯示的貼文。
-
- 循環瀏覽貼文:
-
while ($the_query->have_posts()) : $the_query->the_post();
:它會設定發布數據,以便您可以顯示它。
-
- 顯示貼文:
-
the_title();
和the_excerpt();
:顯示目前貼文的標題和摘錄。
-
- 重置貼文數據:
-
wp_reset_postdata();
:它將全域帖子資料重置為主查詢的帖子。這對於避免弄亂頁面的其他部分很重要。
-
您可以使用的常用方法
以下是WP_Query
中可用來處理查詢的一些常用方法:
-
get_posts
:- 它的作用:檢索帖子列表。
- 範例:php複製程式碼
$posts = get_posts(array('category' => 'news'));
-
have_posts
:- 它的作用:檢查是否有任何要顯示的帖子。
- 範例:php複製程式碼
if ($the_query->have_posts()) { // There are posts to show }
-
the_post
:- 它的作用:設定目前的發布資料。
- 範例:php複製程式碼
$the_query->the_post();
-
fill_query_vars
:- 它的作用:完成缺少的查詢詳細資料。
- 範例:php複製程式碼
$the_query->fill_query_vars($args);
透過向 WP_Query 提供正確的訊息,您可以對其進行自訂以執行不同的任務。該方法是一種靈活且安全的調整類別屬性的方法。
WP_Query 與 query_posts():哪一個比較可取?
以下是 WordPress 中WP_Query
與query_posts()
的詳細比較表,其中包含一些要點,可以幫助您理解為什麼WP_Query
通常優於query_posts()
:
特徵 | WP_查詢 | 查詢貼文() |
---|---|---|
目的 | 建立自訂查詢以從資料庫檢索貼文。 | 修改頁面主查詢(不建議一般使用)。 |
主要用途 | 非常適合建立新查詢和以自訂方式顯示貼文。 | 通常用於更改主查詢,但不建議。 |
推薦用途 | 是的,這是獲取和顯示帖子的推薦方式。 | 不,最好避免在主循環、外掛程式和主題中使用此函數。 |
對主查詢的影響 | 不影響主查詢。您可以執行自訂查詢而無需更改主循環。 | 完全覆蓋主查詢,這可能會導致衝突或意外結果。 |
重置發布數據 | 執行自訂查詢後,使用wp_reset_postdata() 還原原始查詢。 | 沒有等效的功能,這意味著您可能必須手動恢復主查詢的發布資料。 |
處理多個查詢 | 可以處理多個查詢,專為複雜場景而設計。 | 僅處理一個查詢並更改主查詢,這對於多個查詢可能會出現問題。 |
性能影響 | 通常效能更好,因為它不會改變主查詢。 | 效率可能較低,並且可能由於對主查詢的影響而導致問題。 |
自訂查詢範例 | $custom_query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 5)); | query_posts(array('post_type' => 'post', 'posts_per_page' => 5)); |
重置資料範例 | <?php wp_reset_postdata(); ?> | 無重設功能,如果主查詢發生變化,需要手動重設。 |
使用方便 | 易於使用內建方法和函數來查詢貼文和頁面。 | 不太簡單,如果使用不小心可能會導致問題。 |
WP_Query 用法的一些範例
為了更好地理解 WP_Query 及其實際用法,請查看下面給出的一些範例:
1.顯示本週發布的最新帖子
如果您擁有良好的用戶群或相當數量的網路流量,這表示您的訪客喜歡您的內容並且希望閱讀您網站上發布的最新文章。
在設計網站時,您可以在網頁的專門部分中展示最近的貼文。值得慶幸的是,使用 WP_Query,您可以輕鬆地根據日期參數查找帖子。讓我們看看如何。
<?php
$arguments = array(
"date_query" => array(
array(
"year" => date( "Y" ),
"week" => date( "W" ),
)
)
);
$posts = new WP_Query($arguments);
?>
在此範例中,我們建立一個 WP_Query 來尋找本週發布的貼文。我們使用 WP_Query 的一個名為date_query
的特殊部分來指定我們的搜尋條件。
查詢的主要目的是查找本週發布的帖子。為此,我們使用 date_query 參數根據日期搜尋貼文。它需要一組與日期相關的參數。
因此,當您自訂date_query
參數時,您可以取得並顯示最近發布的貼文。但是,您也可以自由指定自訂值,以使查詢更有效並突出顯示過去一周撰寫的最新文章。
2. 顯示特定類別的最新帖子
您的網站訪客可能經常尋找最新信息,為了提高參與度和頁面瀏覽量,推薦一些他們可能喜歡的更多相關帖子是一個很好的做法。
儘管如此,您可以透過多種方法在 WordPress 中連結相關帖子,WP_Query 是實現此目的的有效方法之一。對於始終發布最新內容的網站來說,這尤其是一個好方法。
例如,如果有人閱讀了一篇有關 WordPress 錯誤的文章,WP_Query 可以幫助顯示其他類似的和最近的文章。
因此,如果您想獲取特定類別中的最新帖子,請使用此 WP_query,並進行一些包含您的網站資訊的編輯:
<?php
// Get the current post id.
$current_post_id = get_the_ID();
// Get the current post's category (first one if there's more than one).
$current_post_cats = get_the_category();
$current_post_first_cat_id = $current_post_cats[ 0 ]->term_id;
// Setup arguments.
$args = array(
// Get category's posts.
'cat' => $current_post_first_cat_id,
// Exclude current post.
'post__not_in' => array( $current_post_id )
);
// Instantiate new query instance.
$my_query = new WP_Query( $args );
?>
3. 顯示同一作者、同一類別的帖子
如果訪客喜歡您的內容,他們很可能會喜歡作者的觀點、寫作風格和看法。
為此,您可以使用 WP_Query 向讀者推薦由同一作者撰寫的類似貼文。該查詢將搜尋由同一作者撰寫的與當前帖子相同類別的帖子。
為此,我們必須建立一個特定的 WP_Query 字串,它將尋找具有相似作者和相同類別的貼文。
這是代碼:
<?php
$arguments = array(
"author_name" => "Rahul",
"category_name" => "WordPress",
"posts_per_page" => 3,
);
$posts = new WP_Query($arguments);
?>
在上面的程式碼中,您需要將“Rahul”替換為作者姓名,並將“WordPress”替換為類別名稱。
4. 顯示您最受歡迎的帖子
就像您為讀者顯示的最新或最近的帖子一樣。您可能還想展示有關讀者喜歡並經常參與的主題的貼文。為此,您可以使用orderby參數並將其傳遞給comment_count參數。
<?php
$arguments = array(
"category_name" => "WordPress Errors",
"orderby" => "comment_count",
"posts_per_page" => 5,
);
$posts = new WP_Query($arguments);
?>
上面的 WP_Query 將查找「WordPress 錯誤」類別中的帖子,並根據每個帖子的評論數量過濾結果。
輸出將顯示評論最多的 5 個帖子,按從左到右降序排列,從參與度最高的帖子開始,到參與度最低的帖子結束。
結論
現在您已經見證了 WP_Query 的強大功能以及它如何讓您輕鬆地在 WordPress 中執行資料庫請求。此外,您還可以靈活地自訂網站並為訪客提供獨特的體驗。
要使用 WP_Query,您可以:
- 建立循環:顯示您的貼文。
- 使用查詢參數:自訂您的搜尋。
- 設定特定參數:過濾結果。
- 修改類別屬性:用方法調整查詢結果。
如果您掌握了所有這些技術,您將能夠根據受歡迎程度和日期等各種因素輕鬆推薦特定的貼文。
這種技術有助於提高用戶的參與度,增強用戶體驗,還可以幫助您的忠實訪客找到更多相關的內容。
如果您對 WP_Query 仍然有疑問或想添加更多我們可能錯過的內容。請在下面的評論部分告訴我們。
Rahul Kumar 是一位網路愛好者和內容策略師,專門從事 WordPress 和網站託管。憑藉多年的經驗和對了解最新行業趨勢的承諾,他制定了有效的線上策略來增加流量、提高參與度並提高轉換率。拉胡爾對細節的關注以及製作引人入勝的內容的能力使他成為任何希望提高其線上形象的品牌的寶貴資產。