最も必要とされている時に、信頼できるWordPressチュートリアルを。
WordPress入門ガイド
WPBカップ
2500万人以上
当社のプラグインを使用しているウェブサイト
16+
WordPress経験年数
3000+
専門家によるWordPressチュートリアル

WordPressで複数のループを使用して重複投稿の表示を回避する方法

複数のWordPressクエリを使用して異なる投稿セットを表示している場合、重複コンテンツに遭遇する可能性があります。これは、一部の投稿が複数のループに一致し、2回表示される可能性があるためです。

WordPressには、複数のループで投稿が重複するのを避けるための組み込みオプションはありません。しかし、15年以上にわたるさまざまなWordPressサイトの管理経験から、この問題を回避する方法を学びました。そのため、サイトに追加して、異なるループで重複投稿が表示されるのを回避できるカスタムコードスニペットを作成しました。

この記事では、WordPressで複数のループを使用して重複投稿の表示を簡単に回避する方法を説明します。

WordPressの複数のループで作業する際の投稿の重複を回避する

WordPressの複数のループで重複投稿がどのように表示されるか

カスタムWordPressテーマまたはカスタムページテンプレートを作成する場合、複数のWordPressループを使用する必要がある場合があります。

たとえば、サイトの最も人気のある投稿の隣に最近の投稿を表示したい場合があります。各カテゴリのすべての投稿を表示することで、読者が興味深いコンテンツを見つけるのに役立つ可能性もあります。

これらの例のすべてにおいて、1つの投稿が複数のループの基準に一致する可能性があります。この場合、WordPressは重複コンテンツを表示します。

この重複コンテンツは、サイトを乱雑でプロフェッショナルでないように見せることがあります。また、価値を追加せずに画面スペースを占有します。

各ループの投稿を動的に生成しているため、重複投稿が複数のループに表示されるかどうかを手動で予測することはできません。

それでは、WordPressで複数のループを扱う際に重複投稿を回避する簡単な方法を見てみましょう。

複数のWordPressループで重複投稿を回避する

このガイドでは、重複投稿エラーを引き起こすWordPressコードのサンプルを示し、その後、問題を修正するコードスニペットを共有します。

WordPressの Загрузка темыまたはカスタムテンプレートを作成する場合、コードは完全に異なる場合があります。ただし、このコードスニペットを開始点として使用し、独自のウェブサイトに合わせて変更することができます。

まず、重複投稿の問題を作成しましょう。以下のサンプルコードでは、重複投稿を回避せずに、「travel」カテゴリのすべての投稿と「news」カテゴリのすべての投稿を表示しています。

/******  The First Query *******/
 
$first_query = new WP_Query(  array (
'category_name' => 'news',
'posts_per_page'  =>  3 
));
  
// The Loop
if ( $first_query->have_posts() ) {
    echo '<ul>';
    while ( $first_query->have_posts() ) {
        $first_query->the_post();
 
//display posts
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
 
 
/******  The Second Query *******/
$second_query = new WP_Query(  array (
'category_name' => 'travel',
'posts_per_page'  =>  3
 
) );
 
// The Loop
if ( $second_query->have_posts() ) {
 
echo '<ul>';
while ( $second_query->have_posts() ) {
 
$second_query->the_post();
echo '<li>'; 
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

ご覧のとおり、このコードはどちらのクエリでも重複する投稿をチェックしていません。

投稿が「ニュース」と「旅行」の両方のカテゴリに属している場合、次の画像のように2回表示されます。

WordPressで複数のループを使用して投稿の重複表示を回避する方法

この問題を解決しましょう。

最初のループに表示されるすべての投稿に関するデータを一時的に保存する必要があるため、WordPressブログで重複する投稿を回避できます。

その情報があれば、2番目のループに重複投稿が表示されないように、2番目のクエリを変更できます。

/******  The First Query *******/
 
$first_query = new WP_Query(  array (
'category_name' => 'news',
'posts_per_page'  =>  3
) );
  
// The Loop
if ( $first_query->have_posts() ) {
    echo '<ul>';
    while ( $first_query->have_posts() ) {
        $first_query->the_post();
         
// Store Post IDs in an Array to reuse later
$exclude[] = $post->ID; 
 
//display posts
echo '<li>';
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
 
 
/******  The Second Query *******/
$second_query = new WP_Query(  array (
'category_name' => 'travel',
'post__not_in'  =>  $exclude, // Tell WordPress to Exclude these posts
'posts_per_page'  =>  3
 
) );
 
// The Loop
if ( $second_query->have_posts() ) {
 
echo '<ul>';
while ( $second_query->have_posts() ) {
 
$second_query->the_post();
echo '<li>'; 
echo the_post_thumbnail( array(50, 50) );
echo get_the_title(); 
echo '</li>';
    }
echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

上記のコードでは、投稿IDを$excludeという配列に保存しています。その後、2番目のクエリにpost__not_in引数を追加し、最初のループに表示された投稿を除外します。

サイトにコードスニペットを追加することに慣れていない場合は、WPCodeを使用する方が簡単な方法です。これは、サイトを壊すリスクなしにカスタムコードを追加するのに役立つ、WordPress向けの最高のコードスニペットプラグインです。

まず、WPCodeプラグインをインストールして有効化する必要があります。ヘルプが必要な場合は、WordPressプラグインのインストール方法に関するガイドをご覧ください。

有効化したら、WordPressダッシュボードから「コードスニペット」>「スニペットを追加」に移動し、「カスタムコードを追加(新規スニペット)」オプションをクリックできます。

WPCodeに新しいカスタムコードスニペットを追加

その後、カスタムコードをコードプレビューエリアに貼り付け、一番上にタイトルを入力できます。

ドロップダウンメニューをクリックして、「コードタイプ」をPHPスニペットとして選択する必要もあります。

カスタムコードスニペットを入力

コードを入力したら、下にスクロールして「挿入」セクションを選択してください。

ここでは、「自動挿入」のデフォルト設定を使用して、プラグインがコードをサイトに自動的に追加できるようにすることができます。

WPCode でスニペットを挿入する方法

完了したら、スニペットを保存してアクティブ化してください。

詳細については、WordPressでカスタムコードを追加する方法に関するガイドを参照してください。

これで、WordPressのウェブサイトにアクセスすると、重複した投稿が消えていることがわかります。

WordPressで複数の投稿を使用する際の重複投稿の削除

この記事が、WordPressで複数のループを使用して重複投稿の表示を回避する方法を学ぶのに役立ったことを願っています。また、WordPressループで任意の数の投稿を無効にする方法およびWordPressでスティッキー投稿を作成する方法に関するガイドも参照してください。

この記事が気に入った場合は、WordPressのビデオチュートリアルのために、YouTubeチャンネルを購読してください。また、TwitterFacebookでも私たちを見つけることができます。

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

究極のWordPressツールキット

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

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

15 CommentsLeave a Reply

  1. これがどのように行うか誰か教えてもらえませんか?私は本当にこれに慣れておらず、助けが必要です。投稿IDを付けて、どのように保存するか、明確な例を教えてください。私の投稿IDは1527だとしましょう。

  2. 特定のカテゴリのループの前に2つのループを実行しており、重複を避けたいと考えています。最初の2つのループからIDを配列にどのように保存しますか?

  3. AWESOME!! Thank you so much! And thank you SERGEYVLASOV for that last comment– Worked like a charm for my multiple loops. Hooray!! :)

  4. この方法は、2つのループが同じファイル内にある間はうまく機能します。
    しかし、最初のループを header.php に、もう一方を index.php に配置すると、
    in_array($post->ID, $do_nit_duplicate) が null を返します。
    どうすればよいですか?

  5. 皆さん、こんにちは。

    これは、サイトでの投稿の二重表示に関する現在の問題に役立ちますか?投稿の下にコピーが表示され、1、2、->ボタンが表示されます…

    サイトが…プラグインを無効化して再有効化しましたが、本当に気が狂いそうです。

  6. このアルゴリズムには欠陥があると思います。1つしか重複を検出できません。したがって、マジックラインは次のようになります。
     
    $do_not_duplicate[] = $post->ID
     
    そして、次のように使用されます。
     
    if(in_array($post->ID, $do_nit_duplicate)) continue;

Leave A Reply

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