預設情況下,您的 WordPress 主部落格頁面會依日期降序顯示您最近的貼文。但是,如果您在網站上使用類別,並且您的讀者想要查看每個類別中的新內容,您可能希望您的部落格頁面看起來有所不同。
在本教程中,我將向您展示如何做到這一點。我將演示如何:
要學習本教程,您需要:
第一步是設定主題。我將創建「二十四」主題的子主題,只包含兩個檔案:style.css
和 index.php
。
這是我的樣式表:
/* Theme Name: Display the Most Recent Post in Each Category Theme URI: http://code.tutsplus.com/tutorials/display-the-most-recent-post-in-each-category--cms-22677 Version: 1.0.0 Description: Theme to accompany tutorial on displaying the most recent post fort each term in a taxonomy for Tutsplus, at http://bitly.com/14cm0yb Author: Rachel McCollin Author URI: http://rachelmccollin.co.uk License: GPL-3.0+ License URI: http://www.gnu.org/licenses/gpl-3.0.html Domain Path: /lang Text Domain: tutsplus Template: twentyfourteen */ @import url('../twentyfourteen/style.css');
我稍後會返回此文件來添加樣式,但現在 WordPress 只需要識別子主題。
由於我希望我的主部落格頁面顯示每個類別中的最新帖子,因此我將在我的子主題中建立一個新的 index.php
檔案。
首先,我將複製 24 中的 index.php
文件,並編輯掉循環和其他內容,使其看起來像這樣:
<?php /** * The main template file. * * Based on the `index.php` file from TwentyFourteen, with an edited version of the `content.php` include file from that theme included here. */ ?> <?php get_header(); ?> <div id="main-content" class="main-content"> <?php if ( is_front_page() && twentyfourteen_has_featured_posts() ) { // Include the featured content template. get_template_part( 'featured-content' ); } ?> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> </div> </div> <?php get_sidebar( 'content' ); ?> </div> <?php get_sidebar(); ?> <?php get_footer(); ?>
第一步是確定部落格中的類別。緊接著打開 <div id="content">
標籤,加入以下內容:
<?php $categories = get_categories(); foreach ( $categories as $category ) { } ?>
這使用 get_categories()
函數來取得部落格中的類別清單。預設情況下,這將按字母順序獲取,並且不會包含任何空類別。這對我有用,所以我不會添加任何額外的參數。
然後我使用 foreach ( $categories as $category ) {}
# 告訴 WordPress 依序執行每個類別並執行大括號內的程式碼。下一步將建立一個針對每個類別執行的查詢。
現在您需要定義查詢的參數。在大括號內加入以下內容:
$args = array( 'cat' => $category->term_id, 'post_type' => 'post', 'posts_per_page' => '1', );
這只會取得目前類別中的一篇貼文。
接下來,使用 WP_Query
類別插入查詢:
$query = new WP_Query( $args ); if ( $query->have_posts() ) { ?> <section class="<?php echo $category->name; ?> listing"> <h2>Latest in <?php echo $category->name; ?>:</h2> <?php while ( $query->have_posts() ) { $query->the_post(); ?> <article id="post-<?php the_ID(); ?>" <?php post_class( 'category-listing' ); ?>> <?php if ( has_post_thumbnail() ) { ?> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail( 'thumbnail' ); ?> </a> <?php } ?> <h3 class="entry-title"> <a href="<?php the_permalink(); ?>"> <?php the_title(); ?> </a> </h3> <?php the_excerpt( __( 'Continue Reading <span class="meta-nav">→</span>', 'twentyfourteen' ) ); ?> </article> <?php } // end while ?> </section> <?php } // end if // Use reset to restore original query. wp_reset_postdata();
這將輸出每篇文章的特色圖片、標題和摘錄,並且每一個都包含在一個連結中。
讓我們看看現在的樣子:
如您所見,有問題。我的頁面顯示每個類別中的最新帖子,但它是重複的帖子,因為有時一個帖子會是多個類別中的最新帖子。讓我們解決這個問題。
在新增 get_categories()
函數的行上方,加入以下行:
$do_not_duplicate = array();
這會建立一個名為 $do_not_duplicate
的空數組,我們將使用它來儲存每個貼文輸出的 ID,然後檢查稍後查詢的任何貼文的 ID 是否在其中該陣列。
接下來,在查詢選項下方新增一行,因此前兩行如下所示:
<?php while ( $query->have_posts() ) { $query->the_post(); $do_not_duplicate[] = $post->ID; ?>
這會將目前貼文的 ID 加到 $do_not_duplicate
陣列。
最後,在查詢參數中新增一個參數,以避免輸出此陣列中的任何貼文。您的論點現在如下所示:
$args = array( 'cat' => $category->term_id, 'post_type' => 'post', 'posts_per_page' => '1', 'post__not_in' => $do_not_duplicate );
這使用 'post__not_in'
參數來尋找貼文 ID 陣列。
儲存您的 index.php
檔案並再次查看您的部落格頁面:
這樣更好了!現在您的貼文不再重複。
目前,內容有點分散,特色圖片位於貼文標題和摘錄上方。讓我們添加一些樣式以使圖像向左浮動。
在主題的 style.css
檔案中,加入以下內容:
.listing h2 { margin-left: 10px; } .category-listing img { float: left; margin: 10px 2%; } .category-listing .entry-title { clear: none; }
現在內容更適合頁面且佈局更好:
您可以調整此技術以處理不同的內容類型或分類法。例如:
get_categories()
替換為get_terms()
並變更'cat'
查詢參數來查找分類術語。 'post_type' => 'post'
參數您的查詢參數與您的貼文類型。 foreach
語句來運行多個循環。 single.php
頁面,以便在貼文內容之後顯示每個類別中最新貼文的連結。如果執行此操作,您需要將目前顯示頁面的 ID 新增至 $do_not_duplicate
陣列中。 有時,以其他方式(而不是簡單地按時間順序)顯示部落格上的最新貼文會很有幫助。在這裡,我演示了一種技術,用於顯示部落格上每個類別中的最新帖子,確保帖子在多個類別中不會重複。
以上是每個類別顯示最新的帖子的詳細內容。更多資訊請關注PHP中文網其他相關文章!