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

ウェブサイトをお持ちの場合、他の投稿よりも重要な投稿がいくつかあるでしょう。訪問者にこれらの投稿を最初に確実に表示させる方法の1つは、ページの一番上に配置することです。

WordPressの固定投稿機能を使用すると、標準の投稿でこれを行うことができます。しかし、ウェブサイトでカスタム投稿タイプを使用している場合、これらの固定投稿は期待どおりにページの上部に表示されません。

この記事では、カスタム投稿タイプに目立つ投稿機能を追加し、カスタム投稿タイプアーカイブページに表示する方法を説明します。

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

WordPressカスタム投稿をスティッキーにする理由

標準の投稿やページとは異なる形式でWordPressウェブサイトのコンテンツを作成している場合、おそらくすでにカスタム投稿タイプを使用しているでしょう。例えば、書籍レビューサイトを運営している場合、書籍レビューという投稿タイプを作成しているかもしれません。

カスタム投稿タイプアーカイブの最上部に最も重要なコンテンツを配置することを検討してください。これは、詳細で時間的制約のあるコンテンツ、および最も人気のあるカスタム投稿を特集する最良の方法の1つです。

WordPressには目立つ投稿機能がありますが、カスタム投稿タイプでは利用できません。

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

カスタム投稿タイプに固定投稿を追加する

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

注意: このプラグインはしばらく更新されていませんが、テストでは問題なく動作しました。 WordPressのバージョンでテストされていないプラグインを使用すべきかどうかに関する記事を読むことをお勧めします。

有効化したら、プラグインを設定するために 設定 » 目立つ投稿 – スイッチ ページにアクセスする必要があります。目立たせたいカスタム投稿タイプの横にあるチェックボックスにチェックを入れるだけです。

このチュートリアルでは、「Book Reviews」投稿タイプを確認します。

設定 »固定投稿 - プラグインを設定するためのスイッチページにアクセスしてください

その後、画面下部にある「変更を保存」ボタンをクリックする必要があります。

カスタム投稿タイプを管理する管理画面にアクセスすると、投稿を目立たせるための新しい列が表示されます。目立たせたい投稿の横にある星印をクリックするだけです。

固定したい投稿の横にある星印をクリックします

これで投稿はスティッキーになりました。問題は、WordPressがホームページにのみスティッキー投稿を表示することです。次に、アーカイブページにスティッキー投稿を表示する方法を見ていきましょう。

カスタム投稿タイプアーカイブに固定投稿を表示する

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

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

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

例えば、Twenty Twenty-Oneテーマを使用している場合は、/wp-content/themes/twentytwentyone/に移動する必要があります。

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

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

FTPクライアントを使用してテーマフォルダにアクセスする

その後、同じフォルダにある archive.php ファイルを見つける必要があります。archive.php の内容をコピーして、作成した新しいファイルに貼り付けるだけです。

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

準備ができたら、以下のコードをテーマのfunctions.phpファイル、またはWPCodeのようなコードスニペットプラグイン(推奨)に追加する必要があります(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()関数を使用している場合、'sticky'クラスも追加されるため、CSSを使用して固定された投稿をスタイル設定できます。

これは、デモサイトでの「Book Reviews」カスタム投稿タイプアーカイブの外観です。コードを追加する前は、固定投稿がリストの2番目にありました。

カスタム投稿タイプアーカイブでの固定投稿のプレビュー

これで、テーマの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;
}

こちらはデモサイトの更新されたスクリーンショットです。

固定投稿のCSSスタイリングのプレビュー

目立つ投稿に関するエキスパートガイド

このチュートリアルが、WordPressカスタム投稿タイプアーカイブにスティッキー投稿を追加する方法を学ぶのに役立ったことを願っています。WordPressのスティッキー投稿に関連する他のガイドも参照することをお勧めします。

この記事が気に入ったら、WordPressのビデオチュートリアルについては、YouTubeチャンネルを購読してください。 TwitterFacebookでもフォローできます。

開示:当社のコンテンツは読者によってサポートされています。これは、当社のリンクの一部をクリックすると、当社が手数料を得る可能性があることを意味します。WPBeginnerがどのように資金提供されているか、それがなぜ重要か、そしてどのように私たちをサポートできるかについては、こちらをご覧ください。当社の編集プロセスはこちらです。

究極のWordPressツールキット

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

読者とのインタラクション

13 CommentsLeave a Reply

  1. あなたの例に従って、カスタム投稿タイプをアーカイブで「目立たせる」ことが15分でできました。とても参考になりました、ありがとうございます!

  2. こんにちは、

    今、頭を抱えています…。
    このプラグインを使っています。問題なく動作し、管理画面でも確認できます。データベースでも、wp_options の sticky_posts が更新されているのがわかります。しかし、「post__not_in」=> get_option(‘sticky_posts’) を使おうとしても、何もフィルタリングされません。
    そこで、var_dump(get_option(‘sticky_posts’)) を試してみたのですが、表示されるのは「通常の投稿」の ID だけで、wp_options/sticky_posts にある ID のリスト全体ではありません。

    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. このSticky Post Switchプラグインをご利用いただけます。
    カスタム投稿タイプ用の機能も有効になります。

  4. これはうまく機能しますが、ページネーションされたアーカイブのすべてのページで固定表示されてしまいます。標準投稿の組み込み固定表示機能もこのように動作しますか?

  5. カスタムタクソノミーアーカイブページで動作するようにするには、どのように設定すればよいですか?
    関数の4行目の `is_post_type_archive()` の代わりに `is_tax` や `is_category` を追加してみましたが、ページが壊れてしまいます。

    明らかに何かを見落としていますが、見つけられません。
    何かアイデアはありますか?

  6. ありがとうございます。このチュートリアルを、アーカイブページではなく、専門のページテンプレートに固定投稿を表示するように適応させることは可能ですか?もし可能であれば、どのようにすればこれを達成できますか?

    • カスタムタクソノミーが固定投稿をサポートする投稿タイプを表示している場合、同様の方法で表示できます。archive-post-type.phpテンプレートの代わりに、taxonomy-custom-taxonomy.phpテンプレートを変更します。

      管理者

  7. ありがとうございます。これは役立ちます。
    しかし、プラグインを使わずにカスタム投稿タイプに固定機能を追加することは可能でしょうか?
    スニペットを共有していただけますか?

返信する

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