WordPressの投稿ループから最新の投稿を除外する方法

WordPressブログのセットアップを手伝っていると、レイアウトのカスタマイズ、特に最新の記事を目立たせる方法についてよく質問されます。

時には、最新の投稿をブログフィードの他の投稿に紛れ込ませたくない場合があります。特別なデザインを考えている場合や、まったく別の場所に表示する必要がある場合があります。

ここで、WordPressの投稿ループから最新の投稿を除外します。これにより、最近のコンテンツを好きなように表示する柔軟性が得られます。このガイドでは、WordPressの投稿ループから最新の投稿を除外する2つの方法を紹介します。

WordPressの投稿ループから最新の投稿を除外する方法

WordPressの投稿ループから最新の投稿を除外する理由

デフォルトでは、WordPressはブログ記事を逆時系列順に表示するため、新しい記事が最初に表示されます。しかし、カスタムホームページWordPressアーカイブページでの最新記事の見え方を変えたい場合があります。

WordPressの投稿ループから最新の投稿を除外することで、そのコンテンツを別の場所に表示したり、独自のカスタムスタイルを追加したりすることができます。

それでは、WordPressの投稿ループから最新のブログ記事を除外して非表示にする方法を見ていきましょう。使用したい方法に直接ジャンプするには、以下のクイックリンクを使用してください。

最新の投稿を投稿ループから除外する最も簡単な方法は、WordPressウェブサイトにコードを追加することです。

一部のガイドではテーマファイルを直接編集するように指示していますが、これは一般的なWordPressのエラーを引き起こし、ウェブサイトが完全に壊れてしまう可能性もあります。

そのため、WPCodeの使用をお勧めします。これは、サイトを危険にさらすことなくWordPressにカスタムコードを簡単に追加できる、最高のコードスニペットプラグインです。

まず、無料のWPCodeプラグインをインストールしてアクティブ化する必要があります。詳細については、WordPressプラグインのインストール方法に関するステップバイステップガイドをご覧ください。

プラグインをアクティブ化したら、Code Snippets » + Add Snippet に移動します。

WordPressにカスタムコードスニペットを追加する

ここでは、サイトに追加できる既製のスニペットが表示されます。これには、コメントを完全に無効にするスニペット、WordPressが通常サポートしていないファイルタイプのアップロード、添付ファイルページを無効にするなどが含まれます。

「カスタムコードを追加(新規スニペット)」オプションにマウスカーソルを合わせると、「+カスタムスニペットを追加」ボタンが表示されるので、それをクリックしてください。

カスタムスニペットを追加ボタンをクリック

次に、画面に表示されるオプションのリストから、コードタイプとして「PHPスニペット」を選択します。

コードの種類としてPHPスニペットを選択

次のページで、コードスニペットのタイトルを入力します。これは参照用なので、好きなものを何でも使用できます。

WordPressの投稿ループから最新のブログを除外する

これが完了したら、以下のコードを「コードプレビュー」ボックスに貼り付けます。

<?php
function wpsites_exclude_latest_post( $query ) {
	if ( $query->is_home() && $query->is_main_query() ) {
		$query->set( 'offset', '1' );
	}
}

add_action( 'pre_get_posts', 'wpsites_exclude_latest_post', 1 );

その後、ページを下にスクロールして「挿入」セクションに移動します。

まだ選択されていない場合は、「自動挿入」と「すべてで実行」を選択します。

WordPressウェブサイトにコードを自動的に挿入する

最後に、画面の上部までスクロールし、「非アクティブ」スライダーをクリックして「アクティブ」と表示されるようにします。

次に、「スニペットを保存」または「更新」ボタンをクリックするだけで、コードスニペットが公開されます。

WPCodeを使用してWordPressの投稿ループから最新のブログを除外する

さて、あなたのWordPressウェブサイトにアクセスすると、最新のブログ投稿が非表示になります。

方法2:WordPressテーマファイルを編集する(プラグイン不要)

注意: このチュートリアルは、ブロックテーマは異なるテーマファイルセットを持っているため、クラシックWordPressテーマでのみ機能します。ブロックテーマを使用している場合は、最初の方法を使用することをお勧めします。

また、この方法を実行する際にエラーが発生しないように、最初にウェブサイトのバックアップを取るか、ステージング環境を使用することをお勧めします。

WordPressの投稿ループから最新の投稿を除外する別の方法は、WordPressのテーマファイルにコードを追加することです。

これは上記のコードと同様の結果を達成しますが、表示したい場所に直接WordPressループに追加する必要があります。

例えば、ウェブサイト全体の投稿ループを変更したい場合は、index.php ファイルにコードを追加する必要があります。

WordPressファイルに直接コードを追加すると、WordPressブログのページネーションに問題が発生する可能性があることに注意してください。

まず、WordPressホスティングプロバイダーのファイルマネージャーを開くか、FTPクライアントでウェブサイトに接続する必要があります。

このチュートリアルでは、FTPを使用するよりもはるかに簡単なため、Bluehost のファイルマネージャーを使用します。とはいえ、FTPまたは別のウェブホストを使用する場合でも、手順はほぼ同じです。

Bluehostユーザーの場合は、ホスティングアカウントのダッシュボードにログインし、「Webサイト」タブに移動します。次に、編集したいウェブサイトの「設定」をクリックします。

Bluehostサイト設定

次に、「クイックリンク」セクションに移動します。

次に、「ファイルマネージャー」ボタンをクリックします。Bluehostは、必要に応じてウェブサイトのルートディレクトリも表示します。

Bluehostでウェブサイトのファイルマネージャーにアクセスする

ファイルマネージャーに入ったら、編集したいファイルを見つける必要があります。例えば、コードをindex.phpに追加したい場合、それはpublic_html/wp-content内にある現在のテーマのフォルダで見つかります。

そこに着いたら、index.phpファイルを右クリックして「編集」をクリックします。

Bluehostファイルマネージャーでindex.phpファイルを開く

次に、以下のコードをコピーしてWordPressのループに追加する必要があります。

query_posts('posts_per_page=6&offset=1');

このコードは、ループに最新の投稿に続く5つの投稿のみを表示するように指示します。

コードはWordPressループのすぐ上に直接追加する必要があります。そうすれば、以下のコードスニペットと同様になります。

<?php
query_posts('posts_per_page=6&offset=1');
if ( have_posts() ) {

	// Load posts loop.
	while ( have_posts() ) {
		the_post();

		get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
	}

	// Previous/next page navigation.
	twenty_twenty_one_the_posts_navigation();

} else {

	// If no content, include the "No posts found" template.
	get_template_part( 'template-parts/content/content-none' );

}

Bluehostのファイルマネージャーでのコードは以下のようになります。

Bluehostファイルマネージャーで最新の投稿を除外するコードを追加する

コードを追加したら、「変更を保存」ボタンをクリックするだけです。

次に、WordPressウェブサイトをプレビューしてください。

WordPressの投稿を管理するためのヒントとコツをさらに学ぶ

WordPressブログをさらに最適化したいですか?これらのガイドをご覧ください:

この記事が、WordPressのループから最新の記事を除外する方法を学ぶのに役立ったことを願っています。また、WordPressで投稿や固定ページを一括追加する方法に関するガイドや、WordPressの関連投稿プラグインのおすすめもご覧ください。

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

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

究極のWordPressツールキット

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

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

41 CommentsLeave a Reply

  1. 皆さん、この記事ありがとうございます!これを実装したいのですが、試すたびに奇妙な問題が発生します。エントリがフロントページとまったく同じように表示され、投稿自体ではなく最近の投稿のリストが表示されます。私のコードは、SMThemeであるため、少し異なります。何か助けていただけると幸いです。追伸:2回投稿して申し訳ありませんが、コードが間違って印刷されました。こちらです:

  2. ソリューションはうまく機能しました、ありがとう。しかし、このコードを適用した後、ページネーションが壊れました。試しましたが、正しいページネーションで動作させることができませんでした。ページネーションの解決策はありますか?

    • ページの数に応じてliにクラスを適用し、カウンターを付けてp1c1にdisplay:none;のスタイルを付けます。

  3. 2つのプラグインを使用しました。1つは「Recent facebook post」で、WordPressで最新の投稿を表示するため、もう1つは「Facebook publish page」で、WordPressの投稿をFacebookに公開するためです。今、WordPressの投稿からすでに公開されたFacebookの最新投稿を除外したいです。

    どうすればできますか?

    • そのためには、Facebookページからコンテンツを投稿するプラグインに、WordPressからFacebookに投稿が既に公開されたかどうかを確認するチェックが必要です。プラグインファイルを直接編集することは推奨しません。ただし、phpファイルを編集することに慣れている場合は、プラグインを新しいプラグインとしてフォークし、これを達成するためのコードを追加することができます。

      管理者

  4. 素晴らしいヒントをありがとうございます。これを理解するのに何時間も費やしましたが、あなたはそれをとても簡単にしました!

  5. どうもありがとうございます。
    「post__not_in」オプションはWordPress 3.5では機能しません。

  6. うーん、カテゴリページのループでこのコードを試したのですが、そのカテゴリの投稿だけを保持できず、代わりにフロントページのループであるかのようにすべての投稿が表示されました。

  7. こんにちは、質問が一つあります。これを実行すると、ページネーションが機能しなくなります。どうすれば修正できますか?

    ありがとうございます、それ以外は完璧に動作します!!

    ありがとう!

        • インデックスページではページネーションがほとんど機能しないため、独自のAJAXページネーション呼び出しを作成できます。ほとんどの場合、WP_Query()よりもquery_posts()がページネーションに役立ちます。

  8. あるカテゴリの投稿をオフセットする方法はありますか?

    例:カテゴリxの最新の投稿を除くすべての投稿を表示したい

  9. “query_posts(‘posts_per_page=6&offset=1’);” this is not worked for me , while i am using the WP-PageNavi plugin for page navigation. :(

  10. Thanks for the info. Worked well :) Though, I’m encountering another issue for another site I’m currently doing. Is there a way to exclude from the loop only the latest post of a particular category?

    要は、ポッドキャストを公開するブログがあるんです。フロントページには最新のポッドキャストがハイライト表示され、投稿は「Podcast」カテゴリの下に独自のスタイルで公開されます。同時に、フロントページには最新の投稿5件も表示されますが、これには「podcast」カテゴリの投稿が含まれる場合があります。最新の「Podcast」カテゴリの投稿は、すでに独自のスタイルでフィーチャーされているため、ループに表示したくありません。助けていただけると幸いです。よろしくお願いします!

  11. アドバイスありがとうございます!
    ただ、現在画面に表示されている投稿を除外する方法はありますか?

    はい、もしそうなら、その方法を教えていただけますか?

    事前に感謝します!

      • 私のページの1つは、ユーザーが表示している最新または現在の投稿を最初に表示します。

        現在の投稿はループによって呼び出されます。

        この投稿の下に、現在の投稿はこのリストに表示せずに、他の以前の投稿の抜粋を表示したいです。

        前の投稿抜粋は query_posts: によって呼び出されます。

        query(‘showposts=3&cat=5’);
        while($previousPosts->have_posts()) : $previousPosts->the_post();
        ?>

        ご覧の通り、カテゴリ5から3つの投稿(抜粋)を呼び出しており、これはニュースカテゴリから3つの投稿を表示します。これは問題なさそうですが、これらの3つの投稿抜粋の中に、ループで呼び出されている現在の投稿もリストに含まれています。
        このリストから現在の投稿を除外する方法をご存知ですか?

        再度ありがとうございます!

        • 迅速なご返信、改めてありがとうございます。
          しかし、クエリに offset=1 を試しましたが、古い投稿を押すと、メインループで古い投稿が表示され、リストの抜粋では最新の投稿は除外されますが、現在投稿となっている古い投稿は抜粋リストに残ったままです。

          最新の投稿ではなく、現在の投稿を除外する方法はありますか?

          Thanks so far already :)

        • 何が起こっているのか正確に確認できるように、サイトのライブリンクをメールで送信してください。メールにはお問い合わせフォームを使用してください。

  12. Thank you so much for this piece as i was looking for a way to exclude 4 latest posts form my home page and i got answer by this articles and i have replaced (query_posts(‘posts_per_page=6&offset=1’);) by query_posts(‘posts_per_page=6&offset=3’); and its done :)

    • これは多段階のプロセスです。まず、カスタムページテンプレートが必要です。次に、そのカスタムページ(フロントページ)を作成する必要があります。その後、カスタムテンプレートで固定投稿のみを表示するクエリを実行します。

      管理者

返信する

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