サポート » 使い方全般 » 関連記事をいくつか表示→重複させないようにしたい

  • 解決済 gcr005

    (@gcr005)


    お世話になります。
    質問させていただきます。

    やりたいのは、
    記事詳細ページ(single-hoge.php)内に
    「関連記事1」で同じ「投稿者名」の他の記事リンク表示、
    「関連記事2」で同じ「会社名」の他の記事リンク表示です。

    ※重複するので「関連記事1」に表示されているものは、
    「関連記事2」では非表示にしたいのです。

    つまり、
    ●そのページの投稿者と、同じ「投稿者名」でくくるリンク群
    ●そのページの投稿者と同じではない、且つ、同じ「会社名」のリンク群
    を作りたいのですが、上手く重複が消えたり消えなかったりします。

    <!–関連記事1ここから–>
    <?php
    $post_id = $post->ID;
    $author = get_post_meta($post_id,’投稿者名’, true);
    $args = array(
    ‘post_type’ => ‘hoge’,
    ‘numberposts’ => -1 ,
    ‘meta_query’ => array(
    ‘relation’ => ‘AND’,
    array(
    ‘key’ => ‘投稿者名’,
    ‘value’ => $author,
    ),
    )
    );
    $related_posts = get_posts( $args );
    if (count($related_posts) >= 2) : // 必ず自分も含まれるので 2 以上

    foreach ($related_posts as $post) :
    setup_postdata($post);
    if ($post->ID!=$post_id) : // 自分は外す
    ?>

    <?php echo get_post_meta($post->ID,”会社名”,true); ?>
    <?php echo get_post_meta($post->ID,”投稿者名”,true); ?>

    <?php
    endif;
    endforeach;
    wp_reset_postdata();
    endif;
    ?>

    <!–関連記事1ここまで–>

    <!–関連記事2ここから–>
    <?php
    $post_id = $post->ID;
    $company = get_post_meta($post_id,’会社名’, true);
    $author = get_post_meta($post_id,’投稿者名’, false);
    $args = array(
    ‘post_type’ => ‘hoge’,
    ‘numberposts’ => -1 ,
    ‘meta_query’ => array(
    ‘relation’ => ‘AND’,
    array(
    ‘key’ => ‘会社名’,
    ‘value’ => $company,
    ‘compare’ => ‘=’,
    ),
    array(
    ‘key’ => ‘投稿者名’,
    ‘value’ => $author,
    ‘compare’ => ‘!=’,
    ),
    )
    );

    $related_posts = get_posts( $args );
    if (count($related_posts) >= 2) : // 必ず自分も含まれるので 2 以上

    foreach ($related_posts as $post) :
    setup_postdata($post);
    if ($post->ID!=$post_id) : // 自分は外す
    ?>
    <?php echo get_post_meta($post->ID,”会社名”,true); ?>
    <?php echo get_post_meta($post->ID,”投稿者名”,true); ?>

    <?php
    endif;
    endforeach;
    wp_reset_postdata();
    endif;
    ?>
    <!–関連記事2ここまで–>


    以前、pluto1234さまにお知恵を貸して頂いて
    【解決済み】とさせていただいた記事を参考にしています。
    http://ja.forums.wordpress.org/topic/12686?replies=9

    すいません、初歩的な事なのかもしれませんが、
    どなたかお知恵を貸して頂けないでしょうか。
    何卒よろしくお願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 変数 $exclude に関連記事1と自分自身を格納し、関連記事2では対象外にしています。
    get_posts() の引数で自分自身を対象外にしたので、

    if (count($related_posts) >= 2) : // 必ず自分も含まれるので 2 以上
    if ($post->ID!=$post_id) : // 自分は外す

    のような判定はもはや不要です。
    正しく動作するかどうかは未確認です。

    <?php
    $post_id = $post->ID;
    $author = get_post_meta($post_id,'投稿者名', true);
    $args = array(
        'post_type'   => 'hoge',
        'numberposts' => -1 ,
        'exclude'     => $post_id, // 自分は対象外
        'meta_query'  => array(
            array(
                'key' => '投稿者名',
                'value' => $author,
            ),
         )
    );
    $exclude = array();
    $exclude[] = $post_id;
    $related_posts = get_posts( $args );
    foreach ($related_posts as $post) :
        setup_postdata($post);
        $excude[] = $post->ID;
    ?>
        <?php echo get_post_meta($post->ID,"会社名",true); ?>
        <?php echo get_post_meta($post->ID,"投稿者名",true); ?>
    <?php
    endforeach;
    ?>
    <!--関連記事1ここまで-->
    
    <!--関連記事2ここから-->
    <?php
    $company = get_post_meta($post_id,'会社名', true);
    $args = array(
        'post_type' => 'hoge',
        'numberposts' => -1 ,
        'exclude'     => $exclude, // 関連記事1+自分は対象外
        'meta_query' => array(
            array(
                'key' => '会社名',
                'value' => $company,
            ),
        )
    );
    $related_posts = get_posts( $args );
    foreach ($related_posts as $post) :
        setup_postdata($post);
    ?>
        <?php echo get_post_meta($post->ID,"会社名",true); ?>
        <?php echo get_post_meta($post->ID,"投稿者名",true); ?>
    <?php
    endforeach;
    wp_reset_postdata();
    ?>
    <!--関連記事2ここまで-->

    pluto1234さま

    また、そして早速、本当にありがとうございます!

    いただいたコードで試してみました。

    関連記事2の「関連記事1+自分は対象外」というのが
    効いていないようで、重複して表示されます。
    ※もちろん「自分」は表示されず、
    「関連記事1」以外は全く問題ないのですが…。

    いただいたコードを参考に
    自分でもやってみます!
    ありがとうございます。

    配列名が間違っていました。

    $excude[] = $post->ID;  =>  $exclude[] = $post->ID;

    pluto1234さま

    ありがとうございます!できました!
    本当にありがとうございます!

    変数かえただけで完璧でした。
      $excude[] = $post->ID;
    => $exclude[] = $post->ID;

    また勉強させて頂きます。
    ありがとうございました。

    <!–関連記事1ここから–>
    <?php
    $post_id = $post->ID;
    $author = get_post_meta($post_id,’投稿者名’, true);
    $args = array(
    ‘post_type’ => ‘hoge’,
    ‘numberposts’ => -1 ,
    ‘exclude’ => $post_id, // 自分は対象外
    ‘meta_query’ => array(
    array(
    ‘key’ => ‘投稿者名’,
    ‘value’ => $author,
    ),
    )
    );
    $exclude = array();
    $exclude[] = $post_id;
    $related_posts = get_posts( $args );
    foreach ($related_posts as $post) :
    setup_postdata($post);
    $exclude[] = $post->ID;
    ?>
    <?php echo get_post_meta($post->ID,”会社名”,true); ?>
    <?php echo get_post_meta($post->ID,”投稿者名”,true); ?>
    <?php
    endforeach;
    ?>
    <!–関連記事1ここまで–>

    <!–関連記事2ここから–>
    <?php
    $company = get_post_meta($post_id,’会社名’, true);
    $args = array(
    ‘post_type’ => ‘hoge’,
    ‘numberposts’ => -1 ,
    ‘exclude’ => $exclude, // 関連記事1+自分は対象外
    ‘meta_query’ => array(
    array(
    ‘key’ => ‘会社名’,
    ‘value’ => $company,
    ),
    )
    );
    $related_posts = get_posts( $args );
    foreach ($related_posts as $post) :
    setup_postdata($post);
    ?>
    <?php echo get_post_meta($post->ID,”会社名”,true); ?>
    <?php echo get_post_meta($post->ID,”投稿者名”,true); ?>
    <?php
    endforeach;
    wp_reset_postdata();
    ?>
    <!–関連記事2ここまで–>

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「関連記事をいくつか表示→重複させないようにしたい」には新たに返信することはできません。