• 解決済 yuzz_ponzz

    (@yuzz_ponzz)


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

    自分なりに調べてみたのですがなかなか思うようにいかないため、ご教授いただけますと幸いです。
    PHP、Wordpress共に初心者です。
    カテゴリはダイナミックハイライトで表示中のものに対してclassにcurrentを追加することが出来ますが、それと同じことをカテゴリではなく記事リンクに対して出来るのでしょうか。

    やりたいこと:
    特定のカテゴリに属する記事タイトル一覧をサイドバーに表示させているのですが
    現在表示させている記事を開いている時にサイドバーのタイトル部分をハイライトしたいです
    (get_the_categoryのように)

    以下は現在のコードです。

      <?php
      $myposts = get_posts(‘category=21 & showposts=30 & order=ASC’);foreach($myposts as $post) :?>

    • “><?php the_title(); ?>
      <?php endforeach; ?>

    よろしければアドバイスをお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • mocomoco

    (@silent_dandy)

    やりたいことの実現の前にご提示いただいた現在のコードが正しい形になっていないようなので、以下の形が基本形となるようにしましょう。

    <?php
    $myposts = get_posts('category=21 & showposts=30 & order=ASC');
    foreach($myposts as $post) : setup_postdata($post); ?>
    <?php the_title(); ?>
    <?php endforeach; wp_reset_postdata(); ?>

    本題の記事タイトルハイライトについてですが、

    やりたいこと:
    特定のカテゴリに属する記事タイトル一覧をサイドバーに表示させているのですが
    現在表示させている記事を開いている時にサイドバーのタイトル部分をハイライトしたいです

    この内容を実現するためのステップは以下の通りです。
    1.現在表示中のページが記事詳細ページの場合、その記事のIDを変数に入れておく。
    2.一旦保持してある変数とget_post()で得た記事のIDを比較していき、同一のIDがあった場合、タイトルのclassにcurrentを付加する。

    このステップをコード化すると以下のようになります。

    <?php
    if(is_single()) { $current_id = get_the_ID(); } //投稿記事詳細ページの場合のみIDを取得
    $myposts = get_posts('category=21 & showposts=30 & order=ASC');
    foreach($myposts as $post) : setup_postdata($post);
      if(isset($current_id) && ($current_id == $post->ID)) { //$current_idと同一の投稿IDだった場合
        the_title('<span class="current"">','</span>'); //classにcurrentを付与(ここは任意に変更してください)
      } else {
        the_title();
      }
      endforeach;
      wp_reset_postdata();
    ?>
    トピック投稿者 yuzz_ponzz

    (@yuzz_ponzz)

    mocomocoさん、ご丁寧な回答ありがとうございます。
    コードが正しい形になっていなかったこと、ご指摘大変ありがたいです。

    教えていただいたコードで無事表示中のタイトルにcurrentを追加することが出来ました。
    しかし、PHPは勉強中でして、きっとものすごく初歩的なことで申し訳ないのですが、
    リンク付きのリストにしたいと思っておりまして、
    今までは “><?php the_title(); ?>  で
    リンクをつないでいたのですが、それをどういただいたコードに入れ込むのか分かりませんでした。
    勉強不足で大変恐縮ですが、再度ご教授いただけませんでしょうか。

    トピック投稿者 yuzz_ponzz

    (@yuzz_ponzz)

    すみません、<a>タグが消えてしまうのですね。
    今までは、<a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a>でリンクをつないでいました。

    mocomoco

    (@silent_dandy)

    コード(htmlタグなど)を投稿するときは逆クォートで囲むようにしてください。
    (コード部分を選択してcodeボタンをクリックでOKです。)

    phpからの出力にはechoやヒアドキュメントを使うなどの方法がありますが、
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    のようにphpとhtmlを切り替える方法もよくあるパターンですね。
    http://php.net/manual/ja/language.basic-syntax.phpmode.php

    同様のパターンでhtml部分を記述する前にphpの終了タグを記述し、
    html部分を抜けたらphp開始タグを記述すればよいのです。

    今回の例だと、

    <?php
    if(is_single()) { $current_id = get_the_ID(); } //投稿記事詳細ページの場合のみIDを取得
    $myposts = get_posts('category=21 & showposts=30 & order=ASC');
    foreach($myposts as $post) : setup_postdata($post);
      if(isset($current_id) && ($current_id == $post->ID)) { //$current_idと同一の投稿IDだった場合
    ?>
        <a href="<?php the_permalink(); ?>"><?php the_title('<span class="current"">','</span>'); ?></a>
    <?php  } else { ?>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <?php  }
      endforeach;
      wp_reset_postdata();
    ?>

    こんな感じになります。

    トピック投稿者 yuzz_ponzz

    (@yuzz_ponzz)

    mocomocoさん、重ねてお礼申し上げます。

    ご教授いただいたもので見事やりたいことを実現できました!
    ずっと悩んでいたので大変助かりました。
    本当にありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)

トピック「現在表示している記事のタイトルをハイライトしたい」には新たに返信することはできません。