如何在WordPress自定義帖子類型檔案中添加粘性帖子


最近,我們的一位用戶問我們是否可以在自定義帖子類型檔案中添加粘性帖子。 默認情況下,WordPress具有可用於帖子的粘性功能,但不適用於其他帖子類型。 在本文中,我們將向您展示如何在WordPress自定義帖子類型檔案中添加粘性帖子。 在繼續進行之前,您可能需要學習如何在WordPress中創建自定義帖子類型。

在自定義帖子類型中添加粘性帖子

您需要做的第一件事是安裝並激活Sticky Custom Post Types插件。 激活插件後,轉到 設置»閱讀 然後向下滾動至“粘性自定義帖子類型”部分。 接下來,您需要選擇要啟用此選項的自定義帖子類型。

為自定義帖子類型啟用粘性帖子

現在,我們在此處所做的是,我們已將粘性帖子功能添加到自定義帖子類型中。 自定義帖子類型的即時貼會像常規即時貼一樣顯示在首頁上。

問題在於,默認情況下,WordPress僅在主頁上顯示粘性帖子。 它不會在存檔頁面上顯示粘性帖子。

在自定義帖子類型檔案中顯示粘性帖子

假設您有一個“電影評論”的自定義帖子類型,並使用上面提到的插件啟用了粘性帖子。 現在,您希望在電影評論帖子類型中的粘性帖子以不同的方式顯示在非粘性常規電影評論的頂部。 像這樣:

在自定義帖子類型存檔頁面上顯示粘性帖子

為了實現此目標,您需要做的第一件事是為您的自定義帖子類型創建一個存檔模板,如下所示: archive-post-type.php。 了解如何創建自定義帖子類型存檔頁面。 例如,如果您有一個自定義帖子類型 movie-reviews 那麼您的存檔頁面模板應為 archive-movie-reviews.php。 如果您沒有模板,請創建一個。 只需將主題目錄中archive.php的內容複製並粘貼到新文件中 archive-your-post-type.php

下一步是將此代碼添加到主題的 functions.php 文件:

function wpb_cpt_sticky_at_top( $posts ) {
 
    // apply it on the archives only
    if ( is_main_query() && is_post_type_archive() ) {
        global $wp_query;
 
        $sticky_posts = get_option( 'sticky_posts' );
        $num_posts = count( $posts );
        $sticky_offset = 0;
 
        // Find the sticky posts
        for ($i = 0; $i < $num_posts; $i++) {
 
            // Put sticky posts at the top of the posts array
            if ( in_array( $posts[$i]->ID, $sticky_posts ) ) {
                $sticky_post = $posts[$i];
 
                // Remove sticky from current position
                array_splice( $posts, $i, 1 );
 
                // Move to front, after other stickies
                array_splice( $posts, $sticky_offset, 0, array($sticky_post) );
                $sticky_offset++;
 
                // Remove post from sticky posts array
                $offset = array_search($sticky_post->ID, $sticky_posts);
                unset( $sticky_posts[$offset] );
            }
        }
 
        // Look for more sticky posts if needed
        if ( !empty( $sticky_posts) ) {
 
            $stickies = get_posts( array(
                'post__in' => $sticky_posts,
                'post_type' => $wp_query->query_vars['post_type'],
                'post_status' => 'publish',
                'nopaging' => true
            ) );
 
            foreach ( $stickies as $sticky_post ) {
                array_splice( $posts, $sticky_offset, 0, array( $sticky_post ) );
                $sticky_offset++;
            }
        }
 
    }
 
    return $posts;
}
 
add_filter( 'the_posts', 'wpb_cpt_sticky_at_top' );

// Add sticky class in article title to style sticky posts differently

function cpt_sticky_class($classes) {
			if ( is_sticky() ) : 
			$classes[] = 'sticky';
	        return $classes;
		endif; 
		return $classes;
				}
	add_filter('post_class', 'cpt_sticky_class');

上面的代碼會將您的粘性帖子移到頂部,並且如果您的主題正在使用 post_class() 函數,那麼它將在post類中添加粘性。

您可以通過使用以下方式設置粘性帖子的樣式: .sticky 樣式表中的類。 例:

.sticky { 
background-color:#ededed;
background-image:url('http://example.com/wp-content/uploads/featured.png');
background-repeat:no-repeat;
background-position:right top;
}

造型粘帖

我們希望本文能幫助您在自定義帖子類型檔案中添加粘性帖子。 對於問題和反饋,請在下面留下評論。

資料來源:塔雷克·哈桑