每個類別顯示最新的帖子

WBOY
發布: 2023-08-31 11:29:05
原創
770 人瀏覽過

預設情況下,您的 WordPress 主部落格頁面會依日期降序顯示您最近的貼文。但是,如果您在網站上使用類別,並且您的讀者想要查看每個類別中的新內容,您可能希望您的部落格頁面看起來有所不同。

在本教程中,我將向您展示如何做到這一點。我將演示如何:

  • 識別您部落格上的所有類別
  • 顯示每個帖子的最新帖子,如果帖子有一個,則顯示特色圖片
  • 確保多個類別的貼文不會重複
  • 添加一些樣式使其看起來不錯

您需要什麼

要學習本教程,您需要:

  • WordPress 的開發安裝。
  • 已設定一些貼文和類別。我使用了 WordPress 主題單元測試資料中的資料範例。
  • 一個主題。我將創建「二十四」主題的子主題。
  • 程式碼編輯器。

設定主題

第一步是設定主題。我將創建「二十四」主題的子主題,只包含兩個檔案:style.cssindex.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 檔案。

建立一個空的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">&rarr;</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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板