WordPressブログのセットアップを手伝っていると、レイアウトのカスタマイズ、特に最新の記事を目立たせる方法についてよく質問されます。
時には、最新の投稿をブログフィードの他の投稿に紛れ込ませたくない場合があります。特別なデザインを考えている場合や、まったく別の場所に表示する必要がある場合があります。
ここで、WordPressの投稿ループから最新の投稿を除外します。これにより、最近のコンテンツを好きなように表示する柔軟性が得られます。このガイドでは、WordPressの投稿ループから最新の投稿を除外する2つの方法を紹介します。

WordPressの投稿ループから最新の投稿を除外する理由
デフォルトでは、WordPressはブログ記事を逆時系列順に表示するため、新しい記事が最初に表示されます。しかし、カスタムホームページやWordPressアーカイブページでの最新記事の見え方を変えたい場合があります。
WordPressの投稿ループから最新の投稿を除外することで、そのコンテンツを別の場所に表示したり、独自のカスタムスタイルを追加したりすることができます。
それでは、WordPressの投稿ループから最新のブログ記事を除外して非表示にする方法を見ていきましょう。使用したい方法に直接ジャンプするには、以下のクイックリンクを使用してください。
方法1:WPCodeプラグインを使用する(推奨)
最新の投稿を投稿ループから除外する最も簡単な方法は、WordPressウェブサイトにコードを追加することです。
一部のガイドではテーマファイルを直接編集するように指示していますが、これは一般的なWordPressのエラーを引き起こし、ウェブサイトが完全に壊れてしまう可能性もあります。
そのため、WPCodeの使用をお勧めします。これは、サイトを危険にさらすことなくWordPressにカスタムコードを簡単に追加できる、最高のコードスニペットプラグインです。
まず、無料のWPCodeプラグインをインストールしてアクティブ化する必要があります。詳細については、WordPressプラグインのインストール方法に関するステップバイステップガイドをご覧ください。
プラグインをアクティブ化したら、Code Snippets » + Add Snippet に移動します。

ここでは、サイトに追加できる既製のスニペットが表示されます。これには、コメントを完全に無効にするスニペット、WordPressが通常サポートしていないファイルタイプのアップロード、添付ファイルページを無効にするなどが含まれます。
「カスタムコードを追加(新規スニペット)」オプションにマウスカーソルを合わせると、「+カスタムスニペットを追加」ボタンが表示されるので、それをクリックしてください。

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

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

これが完了したら、以下のコードを「コードプレビュー」ボックスに貼り付けます。
<?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ウェブサイトにアクセスすると、最新のブログ投稿が非表示になります。
方法2:WordPressテーマファイルを編集する(プラグイン不要)
注意: このチュートリアルは、ブロックテーマは異なるテーマファイルセットを持っているため、クラシックWordPressテーマでのみ機能します。ブロックテーマを使用している場合は、最初の方法を使用することをお勧めします。
また、この方法を実行する際にエラーが発生しないように、最初にウェブサイトのバックアップを取るか、ステージング環境を使用することをお勧めします。
WordPressの投稿ループから最新の投稿を除外する別の方法は、WordPressのテーマファイルにコードを追加することです。
これは上記のコードと同様の結果を達成しますが、表示したい場所に直接WordPressループに追加する必要があります。
例えば、ウェブサイト全体の投稿ループを変更したい場合は、index.php ファイルにコードを追加する必要があります。
WordPressファイルに直接コードを追加すると、WordPressブログのページネーションに問題が発生する可能性があることに注意してください。
まず、WordPressホスティングプロバイダーのファイルマネージャーを開くか、FTPクライアントでウェブサイトに接続する必要があります。
このチュートリアルでは、FTPを使用するよりもはるかに簡単なため、Bluehost のファイルマネージャーを使用します。とはいえ、FTPまたは別のウェブホストを使用する場合でも、手順はほぼ同じです。
Bluehostユーザーの場合は、ホスティングアカウントのダッシュボードにログインし、「Webサイト」タブに移動します。次に、編集したいウェブサイトの「設定」をクリックします。

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

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

コードを追加したら、「変更を保存」ボタンをクリックするだけです。
次に、WordPressウェブサイトをプレビューしてください。
WordPressの投稿を管理するためのヒントとコツをさらに学ぶ
WordPressブログをさらに最適化したいですか?これらのガイドをご覧ください:
- WordPressでユーザーをランダムな投稿にリダイレクトする方法
- WordPressで関連記事を表示する方法(ステップバイステップ)
- WordPressで投稿の順序を簡単に変更する方法(ステップバイステップ)
- WordPressのブログページに表示される投稿数を変更する方法
- WordPressループで任意の数の投稿を表示する方法
- WordPressで投稿を一括でカテゴリとタグに移動する方法
この記事が、WordPressのループから最新の記事を除外する方法を学ぶのに役立ったことを願っています。また、WordPressで投稿や固定ページを一括追加する方法に関するガイドや、WordPressの関連投稿プラグインのおすすめもご覧ください。
この記事が気に入ったら、WordPressのビデオチュートリアルについては、YouTubeチャンネルを購読してください。 TwitterやFacebookでもフォローできます。

ジョージ
このコードは、私のブログの問題の90%を解決するのに役立ちました。
WPBeginnerサポート
Glad to hear our code was able to help
管理者
ghazali
ホームページから最新の3つの注目の投稿だけを削除する方法はありますか?
イヴァン・ローガン
フィーチャー画像(サムネイル)のないすべての投稿を削除する方法、9000件あります!
Praveen
ありがとう、よくできました、良い解決策です
Matt
美しい投稿!シンプルで分かりやすく、非常に便利です。おめでとうございます!
Dimarj
BGH_
皆さん、この記事ありがとうございます!これを実装したいのですが、試すたびに奇妙な問題が発生します。エントリがフロントページとまったく同じように表示され、投稿自体ではなく最近の投稿のリストが表示されます。私のコードは、SMThemeであるため、少し異なります。何か助けていただけると幸いです。追伸:2回投稿して申し訳ありませんが、コードが間違って印刷されました。こちらです:
スペース
ソリューションはうまく機能しました、ありがとう。しかし、このコードを適用した後、ページネーションが壊れました。試しましたが、正しいページネーションで動作させることができませんでした。ページネーションの解決策はありますか?
Rickie Anand
ページの数に応じてliにクラスを適用し、カウンターを付けてp1c1にdisplay:none;のスタイルを付けます。
Sabi Maharjan
2つのプラグインを使用しました。1つは「Recent facebook post」で、WordPressで最新の投稿を表示するため、もう1つは「Facebook publish page」で、WordPressの投稿をFacebookに公開するためです。今、WordPressの投稿からすでに公開されたFacebookの最新投稿を除外したいです。
どうすればできますか?
WPBeginnerサポート
そのためには、Facebookページからコンテンツを投稿するプラグインに、WordPressからFacebookに投稿が既に公開されたかどうかを確認するチェックが必要です。プラグインファイルを直接編集することは推奨しません。ただし、phpファイルを編集することに慣れている場合は、プラグインを新しいプラグインとしてフォークし、これを達成するためのコードを追加することができます。
管理者
Pastor Wynn
素晴らしいヒントをありがとうございます。これを理解するのに何時間も費やしましたが、あなたはそれをとても簡単にしました!
Gu-ens
どうもありがとうございます。
「post__not_in」オプションはWordPress 3.5では機能しません。
Jim
うーん、カテゴリページのループでこのコードを試したのですが、そのカテゴリの投稿だけを保持できず、代わりにフロントページのループであるかのようにすべての投稿が表示されました。
Amin
本当にありがとう! とても助かりました!
よろしくお願いいたします!
Fernando
本当にありがとうございます!! とても役立つヒントです!
GangeshMatta
ありがとうございます!
PabloCovarrubias
こんにちは、質問が一つあります。これを実行すると、ページネーションが機能しなくなります。どうすれば修正できますか?
ありがとうございます、それ以外は完璧に動作します!!
ありがとう!
スペース
Yes, pagination not working. you have found any working solution for pagination, I am still searching ..
Kev Bowman
この問題は解決しましたか?
de hams
インデックスページではページネーションがほとんど機能しないため、独自のAJAXページネーション呼び出しを作成できます。ほとんどの場合、WP_Query()よりもquery_posts()がページネーションに役立ちます。
Jon
これ、本当にありがとう! 全くわからなかったのですが、これで完璧にうまくいきました。
Wordpwess
あるカテゴリの投稿をオフセットする方法はありますか?
例:カテゴリxの最新の投稿を除くすべての投稿を表示したい
編集スタッフ
はい、category_in パラメータを選択して、カテゴリIDを追加するだけです。
管理者
Luka
Thanks mate, you save my day
Khurram
“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.
編集スタッフ
どのようなエラーが出ていますか?
管理者
ケン
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」カテゴリの投稿は、すでに独自のスタイルでフィーチャーされているため、ループに表示したくありません。助けていただけると幸いです。よろしくお願いします!
編集スタッフ
必要であれば、ループから「postcast」カテゴリのすべての投稿を除外できます。ただし、最新の投稿だけを除外する簡単な方法はありません。
管理者
Joffrey
アドバイスありがとうございます!
ただ、現在画面に表示されている投稿を除外する方法はありますか?
はい、もしそうなら、その方法を教えていただけますか?
事前に感謝します!
編集スタッフ
ご質問の意味がよくわかりません。どの画面のことですか?
管理者
Joffrey
私のページの1つは、ユーザーが表示している最新または現在の投稿を最初に表示します。
現在の投稿はループによって呼び出されます。
この投稿の下に、現在の投稿はこのリストに表示せずに、他の以前の投稿の抜粋を表示したいです。
前の投稿抜粋は query_posts: によって呼び出されます。
query(‘showposts=3&cat=5’);
while($previousPosts->have_posts()) : $previousPosts->the_post();
?>
ご覧の通り、カテゴリ5から3つの投稿(抜粋)を呼び出しており、これはニュースカテゴリから3つの投稿を表示します。これは問題なさそうですが、これらの3つの投稿抜粋の中に、ループで呼び出されている現在の投稿もリストに含まれています。
このリストから現在の投稿を除外する方法をご存知ですか?
再度ありがとうございます!
編集スタッフ
最初の投稿をスキップするために、クエリに offset=1 を追加できます。
Joffrey
迅速なご返信、改めてありがとうございます。
しかし、クエリに offset=1 を試しましたが、古い投稿を押すと、メインループで古い投稿が表示され、リストの抜粋では最新の投稿は除外されますが、現在投稿となっている古い投稿は抜粋リストに残ったままです。
最新の投稿ではなく、現在の投稿を除外する方法はありますか?
Thanks so far already
編集スタッフ
何が起こっているのか正確に確認できるように、サイトのライブリンクをメールで送信してください。メールにはお問い合わせフォームを使用してください。
ビラル・アーメド
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
Jeremy
メインページで固定投稿以外のすべての投稿を削除するには、このコードをどこに配置しますか?
ありがとう、
編集スタッフ
これは多段階のプロセスです。まず、カスタムページテンプレートが必要です。次に、そのカスタムページ(フロントページ)を作成する必要があります。その後、カスタムテンプレートで固定投稿のみを表示するクエリを実行します。
管理者
dominik
ありがとうございます。まさに探していたものでした!他にヒントがあれば教えてください。
モーニングコピー
これ、ありがとうございます。雑誌スタイルのレイアウトに良い解決策ですね。