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

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

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

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

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

返信する

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