Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
WPBカップ
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

WordPressカスタム投稿タイプアーカイブに先頭固定表示を追加する方法

訪問者が最も重要な投稿を見つけやすくする一つの方法は、最も目に留まりやすいページの上部に配置することです。

しかし、WordPressの先頭固定表示機能は標準投稿では可能ですが、作成したカスタム投稿タイプ(CPT)では機能しません。私たちの経験では、WordPressサイトにこの機能を追加する最も簡単な方法は、プラグインを使用することです。

この投稿では、カスタム投稿タイプに先頭固定表示機能を追加し、カスタム投稿タイプのアーカイブページに表示する方法を紹介します。

How to Add Sticky Posts in WordPress Custom Post Type Archives

なぜWordPressカスタム投稿は先頭固定表示にするのか?

WordPressサイトのコンテンツを標準の投稿やページとは異なるフォーマットで作成する場合、すでにカスタム投稿タイプを使用していると思われます。例えば、書評サイトを運営している場合、書評投稿タイプを作成しているかもしれません。

カスタム投稿タイプのアーカイブの一番上に最も重要なコンテンツを配置したい場合があります。最も人気のあるカスタム投稿だけでなく、深く掘り下げたコンテンツや一刻を争うコンテンツを特集するのに最適な方法の一つです。

しかし、WordPressには先頭固定表示機能があるが、カスタム投稿タイプでは利用できない。

カスタム投稿タイプのアーカイブページに先頭固定表示機能を追加する方法を見てみましょう。

カスタム投稿タイプに先頭固定表示を加える

まず、Sticky Posts – Switchプラグインをインストールして有効化する必要があります。詳しくは、WordPressプラグインのインストール方法のステップバイステップガイドをご覧ください。

注: このプラグインはしばらく更新されていませんが、私たちのテストではまだ問題なく動作しています。WordPressのバージョンでテストされていないプラグインを使用するかどうかについての投稿をお読みください。

有効化した後、プラグインを設定するためにSettings ” Sticky Posts – Switchページにアクセスする必要があります。先頭に固定表示させたいカスタム投稿タイプの次の投稿タイプにチェックを入れてください。

このチュートリアルでは、「書評」投稿タイプをチェックします。

Visit the Settings » Sticky Posts - Switch Page to Configure the Plugin

その後、画面下の「変更を保存」ボタンをクリックします。

これで、カスタム投稿タイプの管理ページにアクセスすると、投稿を先頭固定表示できる新しいカラムがあることに気づくだろう。必要なことはすべて、おすすめ投稿の次の星マークをクリックするだけです。

Click the Star Next to the Posts You Wish to Make Sticky

これで投稿に先頭固定表示ができました。問題は、WordPressが固定投稿をトップページにしか表示しないことだ。次のページでは、アーカイブページに先頭固定投稿を表示する方法を見ていきましょう。

カスタム投稿タイプのアーカイブで先頭固定投稿を表示する

カスタム投稿アーカイブページの先頭に固定表示するには、新しいテンプレートを作成する必要があります。

これを行うには、FTPクライアントまたはWordPressホスティングコントロールパネルのファイルマネージャーオプションを使用する必要があります。FTPを使用したことがない場合は、FTPを使用してWordPressにファイルをアップロードする方法のガイドを参照してください。

FTPクライアントまたはファイルマネージャーを使用してサイトにアクセスし、/wp-content/themes/YOURTHEME/フォルダーに移動する必要があります。

例えば、Twenty Twenty-Oneテーマを使用している場合、/wp-content/themes/twentytwentyone/にナビゲーションする必要があります。

次に、そのフォルダーにarchive-POSTTYPE.phpのような名前で新規ファイルを作成する必要があります。

例えば、カスタム投稿タイプのスラッグが’bookreviews’の場合、archive-bookreviews.phpというファイルを新規作成します。

Visit Your Theme Folder Using an FTP Client

その後、同じフォルダーにあるarchive.phpを探します。archive.phpのコンテンツをコピー&ペーストして、新規作成したファイルに貼り付けます。

次のステップでは、テーマファイルにコードを追加する必要があります。サイトへのコードの追加についてヘルプが必要な場合は、WordPressでカスタマイザーコードを追加する方法についてのガイドを参照してください。

準備ができたら、テーマのfunctions.phpファイルまたはWPCodeのようなコード・スニペット・プラグイン(推奨)に以下のコードを追加する必要があります:

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()関数を使用している場合、CSSを使用してスティッキー投稿をスタイルできるように、’sticky’クラスも追加されます。

これがデモサイトでのBook Reviewsカスタム投稿タイプのアーカイブの様子です。コードを追加する前は、付箋投稿はリストの2番目でした。

Preview of Sticky Post on Custom Post Type Archive

テーマのstyle.cssスタイルシートで.stickyクラスを使用することで、先頭固定表示の投稿をスタイル設定できるようになりました。以下はその例です:

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

デモサイトの更新スクリーンショットです。

Preview of CSS Styling of Sticky Post

先頭固定表示に関する専門家ガイド

カスタム投稿タイプのアーカイブに先頭固定表示を追加する方法はおわかりいただけたと思いますが、WordPressの先頭固定表示に関連する他のガイドもご覧ください。

このチュートリアルで、WordPressカスタム投稿タイプのアーカイブに先頭固定表示を追加する方法を学んでいただけたでしょうか。また、WordPress サイトを高速化する方法や、WordPress のエキスパートが選ぶ最高のアンケートプラグインもご覧ください。

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

情報開示 私たちのコンテンツは読者支援型です。これは、あなたが私たちのリンクの一部をクリックした場合、私たちはコミッションを得ることができることを意味します。 WPBeginnerの資金源 をご覧ください。3$編集プロセスをご覧ください。

アバター

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

究極のWordPressツールキット

ツールキットへの無料アクセス - すべてのプロフェッショナルが持つべきWordPress関連製品とリソースのコレクション!

Reader Interactions

13件のコメント返信を残す

  1. Clare

    I got a custom post type to be “sticky” in an archive in 15 minutes following your example. Super helpful, thank you!

    • WPBeginner Support

      Glad to hear our guide was helpful! :)

      管理者

  2. rom

    Hi,

    I’m banging my head right now….
    I’m using this plugin, it works fine, I can see it in the admin, and on the data base, I can see it update the sticky_posts in wp_options. But, when I try to use ‘post__not_in’ => get_option(‘sticky_posts’), it doesn’t filter any thing.
    So I try to var_dump(get_option(‘sticky_posts’)), and all I get is the id of the ‘normal post’, not the full list of id who I can see are in the wp_options/sticky_posts.

    Which mean if I try to use is_stiky in my loop, it only work in ‘normal’ post, not in CPT, which is logic, since get_option(‘sticky_posts’) is not working properly…. Any idea how I can fix that ? it’s driving me crazy :D

  3. Markus Froehlich

    You can use this Sticky Post Switch Plugin
    It also enables the featuere for custom post types

  4. Pat Ducat

    This works good however it makes it sticky on every page of a paginated archive. Is this how the built-in sticky functionality for standard posts work too?

  5. Aaron

    How could i set this up to work with a custom taxonomy archive page?
    I’ve tried adding ‘is_tax’ and ‘is_category’ instead of the is_post_type_archive() on line 4 of your function but it just breaks the page.

    I’m missing something obviously but can’t seem to find it.
    Any ideas?

  6. Daniel Dropik

    Thanks. Is it possible to adapt this tutorial to display sticky posts onto a specialized page template, rather than on the archives page? If so how might I accomplish this?

    • WPBeginner Support

      Daniel, yes sure it can be done in a separate page template. Simply create a custom template and follow the instructions given above.

      管理者

  7. Shawn

    How do you do this for Custom Taxonomy.php instead of archives.

    • WPBeginner Support

      if the custom taxonomy is displaying post types with sticky posts support, then you can display it in the same manner. Instead of archive-post-type.php template, make changes in taxonomy-custom-taxonomy.php template.

      管理者

  8. Mr.Ultra

    Thanks. This is useful.
    But if it’s possible not using a plugin to add sticky functionality to custom post types?
    Can you share the snippet?

  9. Anir

    Very informative, thanks for sharing. It helps a lot.

  10. Daniel

    Really nice tut.

返信を残す

コメントありがとうございます。すべてのコメントは私たちのコメントポリシーに従ってモデレートされ、あなたのメールアドレスが公開されることはありませんのでご留意ください。名前欄にキーワードを使用しないでください。個人的で有意義な会話をしましょう。