サポート » 使い方全般 » ブログの前後記事リンクにタグも表示する方法

  • silver_kir

    (@silver_kir)


    お世話になっております。

    以下のソースでブログページの最後に前後記事へのリンクをサムネイル付きで取得しています。
    このリンクに、前後記事の持つタグ(タグは1記事に1つのみに限定しています)も表示したいのですがやり方がわかりませんでした。

    <?php
    $prevpost = get_adjacent_post(true, '', true); //前の記事(同一カテゴリの記事のみ取得)
    $nextpost = get_adjacent_post(true, '', false); //次の記事(同一カテゴリの記事のみ取得)
    if( $prevpost or $nextpost ){ //前の記事、次の記事いずれか存在しているとき
    ?>
    <?php
    if ( $prevpost ) { //前の記事が存在しているとき
    echo '<a href="' . get_permalink($prevpost->ID) . '" title="' . get_the_title($prevpost->ID) . '" id="prev" class="clearfix">
    <div id="prev_title">PREV</div>
    ' . get_the_post_thumbnail($prevpost->ID, array(100,100)) . '
    <p>' . get_the_title($prevpost->ID) . '</p></a>';
    } else { //前の記事が存在しないとき
    echo  '<div id="prev_no"><a href="' .home_url('/'). '"><div id="prev_next_home"><i class="fa fa-home"></i>
    </div></a></div>';
    }
    if ( $nextpost ) { //次の記事が存在しているとき
    echo '<a href="' . get_permalink($nextpost->ID) . '" title="'. get_the_title($nextpost->ID) . '" id="next" class="clearfix">  
    <div id="next_title">NEXT</div>
    ' . get_the_post_thumbnail($nextpost->ID, array(100,100)) . '
    <p>'. get_the_title($nextpost->ID) . '</p></a>';
    } else { //次の記事が存在しないとき
    echo '<div id="next_no"><a href="' .home_url('/'). '"><div id="prev_next_home"><i class="fa fa-home"></i>
    </div></a></div>';
    }
    ?>
    <?php } ?>

    よろしくご教授よろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • so-taro

    (@so-taro)

    silver_kirさん、こんにちは。

    $prevpost->IDが前の記事のID。
    $nextpost->IDが次の記事のID。
    タグはget_the_tag(id)でタグを取得できるようなので、1記事に1つだけなら下記のような感じでは出力されないでしょうか?

    <?php echo get_the_tag($prevpost->ID); ?>
    <?php echo get_the_tag($nextpost->ID); ?>

    尚、通常はforeachを利用したほうが良さそうですね。

    https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_the_tags

    <?php
    $posttags = get_the_tags();
    if ( $posttags ) {
      foreach ( $posttags as $tag ) {
        echo $tag->name . ' '; 
      }
    }
    ?>
    トピック投稿者 silver_kir

    (@silver_kir)

    so-taro さん、コメントありがとうございます。

    
    <?php echo get_the_tag($prevpost->ID); ?>
    <?php echo get_the_tag($nextpost->ID); ?>
    

    こちらは上記ソース内に組み込みとエラーがでました。
    組み込み方が悪いのかと試しに現在タイトルを読み込んでいる
    . get_the_title($prevpost->ID) .

    . get_the_tag($prevpost->ID) .
    に差し替える形で組み入れてみても同様にエラーでした。
    get_the_tagsにして組み入れた所エラーは出ませんがタグ情報が読み込めず「Array」が返されました。
    こちらはひょっとしたらfunctions.phpも差し替えているためそちらにタグ関係の処理が入っていないのかもしれません。

    >尚、通常はforeachを利用したほうが良さそうですね。
    こちらの方は既存のソースへの組み込み方が分からず、色々と試してみましたがご提示いただいたのに活用できませんでした。
    具体的な組込例など良ければお願いできませんでしょうか。

    トピック投稿者 silver_kir

    (@silver_kir)

    正当なやり方ではないですがこちらベースにCSSで小細工して目的に近い形にしてみました。

    <?php
    $posttags = get_the_tags();
    if ( $posttags ) {
      foreach ( $posttags as $tag ) {
        echo $tag->name . ' '; 
      }
    }
    ?>

    以下ソースです。

    <div id="prev_next" class="clearfix">  
    <?php
    $prevpost = get_adjacent_post(true, '', true); //前の記事(同一カテゴリ)
    $nextpost = get_adjacent_post(true, '', false); //次の記事(同一カテゴリ)
    if( $prevpost or $nextpost ){ //前の記事、次の記事いずれか存在しているとき
    ?>
    <?php
    if ( $prevpost ) { //前の記事が存在しているとき
    echo '<a href="' . get_permalink($prevpost->ID) . '" title="' . get_the_title($prevpost->ID) . '" id="prev" class="clearfix">
    <div id="prev_title">PREV</div>
    ' . get_the_post_thumbnail($prevpost->ID, array(100,100)) . '
    <p>' . get_the_title($prevpost->ID) . '</p></a>';
    } else { //前の記事が存在しないとき
    echo  '<div id="prev_no"><a href="' .home_url('/'). '"><div id="prev_next_home"><i class="fa fa-home"></i>
    </div></a></div>';
    }
    if ( $nextpost ) { //次の記事が存在しているとき
    echo '<a href="' . get_permalink($nextpost->ID) . '" title="'. get_the_title($nextpost->ID) . '" id="next" class="clearfix">  
    <div id="next_title">NEXT</div>
    ' . get_the_post_thumbnail($nextpost->ID, array(100,100)) . '
    <p>'. get_the_title($nextpost->ID) . '</p></a>';
    } else { //次の記事が存在しないとき
    echo '<div id="next_no"><a href="' .home_url('/'). '"><div id="prev_next_home"><i class="fa fa-home"></i>
    </div></a></div>';
    }
    ?>
    
    <ul class="prev_next-tag">
    	<li>
    		<div>
    <?php
    if ( $prevpost ) { //前の記事が存在しているとき
    $posttags = get_the_tags($prevpost->ID);
    if ( $posttags ) {
      foreach ( $posttags as $tag ) {
        echo $tag->name . ' '; 
      }
    }
    } else { //前の記事が存在しないとき
    }
    ?>
    		</div>
    	</li>
    	<li>
    		<div>
    <?php
    if ( $nextpost ) { //次の記事が存在しているとき
    $posttags = get_the_tags($nextpost->ID);
    if ( $posttags ) {
      foreach ( $posttags as $tag ) {
        echo $tag->name . ' '; 
      }
    }
    } else { //次の記事が存在しないとき
    }
    ?>
    		</div>
    	</li>
    </ul>
    <?php } ?>
    </div>

    本当は前後記事リンクの中で組み込むのが良いのでしょうが、上手くできなかったため別の場所で読み込んでCSSで重ねることで目的に近い形としました。

    so-taro

    (@so-taro)

    silver_kirさん、おはようございます。

    本当は前後記事リンクの中で組み込むのが良いのでしょうが

    というのがわかりづらいので、前後記事のリンク内にタグの文字を追加したいということだとすると、作成頂いたコードの上の方に、変数とタグ取得のコードを置いて、利用したいところでechoする形では難しいでしょうか?

    あいかわらずざっくりで恐縮ですが…

    
    <?php
    $prevpost = get_adjacent_post(true, '', true); //前の記事(同一カテゴリ)
    $nextpost = get_adjacent_post(true, '', false); //次の記事(同一カテゴリ)
    if( $prevpost or $nextpost ){ //前の記事、次の記事いずれか存在しているとき
    
    //------▼追加▼--------------------
    $posttags = get_the_tags($prevpost->ID);
    if ( $posttags ) {
      foreach ( $posttags as $tag ) {
        $pretag = $tag->name; 
      }
    }
    みたいな感じで
    //------▲追加▲--------------------
    
    if ( $prevpost ) { //前の記事が存在しているとき
    ・
    ・
    ・
    
    //------▼必要なところで追加▼--------------------
    echo $pretag;//配列になっているかもしれないので適宜変更
    //------▲追加▲--------------------
    
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「ブログの前後記事リンクにタグも表示する方法」には新たに返信することはできません。