• <dd id="iyeig"></dd>
  • <code id="iyeig"></code>
  • <nav id="iyeig"></nav>
    <object id="iyeig"><sup id="iyeig"></sup></object>
  • <input id="iyeig"><strong id="iyeig"></strong></input>
  • 舟山做網站:WP_Query簡介

    舟山網站建設 | 2019-04-03

    即使您認為您以前從未使用過WP_Query,但每次您在WordPress中加載頁面時都會使用WP_Query。最簡單地說,WordPress是如何工作的,當您加載一個頁面時,它會創建一個WP_Query對象,該對象可以訪問當前URL所調用的POST或POST,即前10個帖子,或1個特定的帖子,或一個類別中的前10個帖子,等等。這允許主題的模板文件中的函數,如_post()和_content()輸出正確的POST或正確的POST內容。

    它的工作原理現在并不重要。重要的是你知道這是怎么回事。這很重要,因為它導致了一個問題:“嗨,喬希,如果我想收集我自己的帖子,也許所有的帖子都有兩個特定的標簽?或者如何顯示按自定義字段排序的自定義POST類型中的所有帖子?“對于一個成長中的WordPress開發者來說,這是一個非常自然的問題。答案是您需要學習如何構造和使用您自己的WP_Query對象。

    請注意,舟山做網站雖然我將要討論的不是特別高級,但它不是最初學者友好的話題。在本文中,我假設您熟悉標準WordPress循環,您可以輕松地打開主題或子主題,并對其中的PHP代碼做一些更改。

    你說的這個“物體”是什么?

    正如您在前兩段中可能注意到的,我一直在引用WP_Query對象。這是因為當您使用WP_Query時,您使用的是所謂的面向對象的PHP。大多數人,包括我自己,在開始使用WP_Query時甚至沒有意識到這一點。
    將WP_Query對象看作是專門為您需要的帖子構建的容器,以及一些有用的方法-在容器中的函數-用于處理它們。例如,在普通WordPress循環中,我們開始循環如下:

    <pre><?php while ( have_posts() ) : the_post(); ?>

    在使用WP_Query時,我們開始如下所示的循環:

    <?php while ( $query->have_posts() ) : $query->the_post(); ?>

    為什么?因為我們需要來自特定WP_Query對象的帖子,在本例中,它存儲在變量$query中。

    構建WP_Query對象

    舟山做網站正如我已經解釋過的,WP_Query對象是非常特定的帖子的容器。當我們構建對象時,我們指定了一個參數列表,以便WordPress用于構建我們的查詢。然后,我們將對象存儲在一個變量中,這樣我們就可以盡可能多地使用它。

    WP_Query的代碼索引頁上有一長串可接受的參數。在這篇文章中,我不能教您所有這些內容,相反,我的目標是讓您能夠輕松地處理文檔中看到的內容。

    下面是一個基本的例子,我們要求所有貼著“天行者”和“絕地”標簽的帖子:

    $args = array(
    	'tag' => 'skywalker',
    	'category' => 'jedi',
    );
    $query = new WP_Query( $args );

    為了把我剛才給你們看的,我們所做的,在一系列的爭論中進行分解,我對WordPress說:“我想要貼上‘天行者’和‘絕地’這個標簽的帖子?!比缓?,我們使用這個參數數組,存儲在變量$args中,并使用它創建一個新的WP_query對象,并將該對象存儲在變量$query中。

    我們可以期待這個查詢返回像盧克天行者和阿納金天行者這樣標題的帖子。

    用WP_Query循環

    僅僅有一個WP_Query對象本身并不特別有用。事實上,我們可以循環遍歷它包含的帖子,這使得它成為一個有用的東西。循環遍歷WP_Query對象與使用常規WordPress循環非常相似。區別在于,我們必須在WP_Query對象的上下文中這樣做。下面是一個基于最后一節的示例:

    <?php
    $args = array(
    	'tag' => 'skywalker',
    	'category' => 'jedi',
    );
    $query = new WP_Query( $args );
    ?>
    <?php if ( $query->have_posts() ) : ?>
    	<?php while ( $query->have_posts() ) : $query->the_post(); ?>
    		<h2><?php the_title(); ?></h2>
    		<?php echo the_content(); ?>
    
    	<?php endwhile; ?>
    <?php endif; ?>
    <?php wp_reset_postdata(); ?>

    讓我們回顧一下我們剛才所做的。第一步是構建WP_Query對象并將其存儲在$Query中。我們已經討論過它的工作原理和原因了。下一步是檢查查詢是否返回任何帖子。我們使用$query->had_post()來實現這一點,這樣WordPress就可以檢查WP_Query對象中的POST,而不是WordPress在加載POST時自動構建的主要WP_Query對象。

    然后,我們使用您習慣于在主題中看到的循環系統進入單獨的帖子,但我們需要在當前對象的上下文中這樣做,所以我們再次使用當前對象,后面跟著箭頭操作符(->)和方法的名稱-類中的函數-我們想要使用的。在循環內部,一切都像往常一樣工作。我們不需要對諸如_title()或_content()這樣的函數做任何特殊的事情。

    我們以我們一貫的方式結束循環,但之后是額外的一步。這是使用wp_reet_postdata()告訴WordPress重新設置自身。這個步驟不會影響后續的循環,但是如果我們跳過這個步驟,它可能會導致其他WP_Query對象,例如您的小部件中的對象的行為異常。因此,用重置結束WP_Query循環非常重要。

    何時及何處使用WP_Query

    知道什么時候使用WP_Query是很重要的,并且要確保您沒有重新創建WordPress已經為您做的事情。例如,如果您想要一個按特定作者列出所有帖子的頁面,則不希望使用WP_Query。WordPress已經有了作者存檔頁面。

    另一方面,如果您希望您的首頁模板(Front-page.php)有兩個自定義循環,該怎么辦?這將是WP_Query的一個很好的用途。假設您想在您的頭版上顯示投資組合自定義帖子類型中的三篇最新文章,然后是上個月發布的評論最多的三篇文章。這兩種方法都是WP_Query的極好用途。最后,我將向您展示如何做到這一點,因為它們是關于如何使用WP_Query的極好的實用示例。

    顯示來自定義郵政類型的帖子

    幾周前,我在這里寫了一篇關于使用Jetpack提供的新組合自定義POST類型的文章。讓我向您展示如何輸出到該POST類型中的三個最新文章的鏈接,即所謂的jetpack-Portfolio。首先,我們需要以特定的POST類型構建一個WP_Query對象,僅限于最近的三個帖子。這些論點就是這樣的:

    $args = array(
    	'post_type' => 'jetpack-portfolio',
    	'posts_per_page'        => '3',
    	'paged'			=> '1',
    );
    $query = new WP_Query( $args );

    我們舟山做網站在這里所做的就是告訴WordPress,我想要一個特定的帖子類型的文章,我希望他們組織成3組-這是‘post_per_page’的論點-我只想要第一個“頁面”或一組帖子-這是‘分頁’的論點。

    現在,我們可以構建一個循環來創建鏈接,使用存儲在$Query中的對象,如下所示:

    <?php if ( $query->have_posts() ) : ?>
    <h1>Recent Portfolio Items</h1>
    	<?php while ( $query->have_posts() ) : $query->the_post(); ?>
    		<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    	<?php endwhile; ?>
    <?php endif; ?>
    <?php wp_reset_postdata(); ?>

    請注意,我將項目組合帖子的標題放在檢查中,以查看我們是否有帖子。這樣,如果沒有組合文章,標題就不會輸出,后面不會顯示任何內容,這看起來很有趣,如果您想要像在常規WordPress循環中一樣從Portfolio文章中添加POST縮略圖,您可以使用_POST_SCHEMEP()。在循環中使用標記,并使其成為您自己的。

    顯示評論最多的帖子

    現在,在最后一個例子中,讓我們展示上個月評論最多的帖子。這個查詢參數的后半部分非常類似于上一個示例中的參數,但我們添加了參數,以便根據POST的注釋數量排序這些帖子。

    使這個參數數組更加復雜的是,我們添加了一個日期查詢。這樣,我們把帖子限制在上個月。您可以跳過日期查詢,以顯示任何時候對帖子評論最多的帖子。日期查詢實際上非常簡單,因為參數非常容易讀。正如你在下面看到的,我們要求在一個月前和今天之前創建的帖子。通過將參數“包含”設置為true,返回日期為今天或確切一個月前的帖子。如果我們把它設為假的話,我們將從今天起錯過帖子,這是毫無意義的:

    $args = array(
    	'date_query'          => array(
    		'after' => '1 month ago',
    		'before' => 'today',
    		'inclusive'         => true,
    	),
    	'orderby' 		=> 'comment_count',
    	'order'	 		=> 'DESC',
    	'posts_per_page'        => '3',
    	'paged'			=> '1',
    );
    $query = new WP_Query($args);

    我將把輸出留給您處理,因為您應該知道如何使用WP_Query對象。

    我想提到的一件事是,如果您一個接一個地使用這兩個查詢,那么將第二個查詢存儲在與第一個查詢名稱相同的變量中將破壞原始查詢對象,并將其替換為新查詢對象。如果您完成了第一個對象,這是一件好事,因為它清除了服務器的內存。如果需要保留以后要使用的第一個對象,則可以將第二個對象存儲在一個不同名稱的變量中。

    質疑

    舟山做網站希望本文有助于為您打開WP_Query的奇妙世界,并使您更容易閱讀WP_Query代碼索引頁面或閱讀其他使用WP_Query實現特定目標的文章或教程。如果您想定制WordPress的行為以實現網站設計所要求的特定目標,了解WP_Query的工作方式非常重要。


    上一篇:沒有了下一篇:舟山專業網站設計:為你的客戶推薦WordPress和Squarecace