サポート » 使い方全般 » wp_list_pages で出力されるリストの最後(最初)のみに特定のclassを追加した

  • 解決済 marushu

    (@marushu)


    こんにちは。初めて質問させていただきます。

    ページを作成すると、ヘッダへリンクがwp_list_pagesで作られますが、このリンクの一番最後(最初)だけにclass=”last(first)”などと特定のclassを作り、CSSで装飾しようと考えています。各リンクはborderで区切り線を表示させて、最後(最初)のリンク部分のみCSSでborderを表示させないようにしたいのです。

    htmlで直接書くclassをそこだけに追加すればいいので可能ですが、header.phpには、wp-list_pages(‘****’)とあるだけです。私はPHPはほとんどわかりませんが、何か条件を設定して、「このリストが最後ならばclass=”last”を追加する」のような操作はできないものでしょうか…。

    ググっているときにMovable TypeにはMTSubCatIsLastというタグがあるのを見つけました。
    こちらの記事です
    リストの最後にだけclassをつける

    WordPressを使ってWebサイト作成に挑戦中で、こちらのフォーラム、ググるなどして思うような記事を見つけきれずに新規で投稿しました。もしも既出でしたらすみません。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • 出力したい場所に
    <?php wp_list_pages('title_li='); ?>
    と書いて(簡単のためタイトル表示はナシで)
    functions.php に以下を追加すればOKです。

    function my_wp_list_pages($output, $r){
      if(preg_match_all('@(<li .*?>.*?</li>)@i', $output, $matches)){
        $matches[1][0] = preg_replace('@class="([^"]*)"@i', 'class="\1 first"', $matches[1][0]);
        $last = count($matches[1]) - 1;
        $matches[1][$last] = preg_replace('@class="([^"]*)"@i', 'class="\1 last"', $matches[1][$last]);
        return implode("\n", $matches[1]);
      }
      return $output;
    }
    add_filter('wp_list_pages', 'my_wp_list_pages', 10, 2);

    トピック投稿者 marushu

    (@marushu)

    kz様

    早速、やってみました。
    ばっちりclassがつきました!

    こんなに早く解決するなんて…
    本当にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「wp_list_pages で出力されるリストの最後(最初)のみに特定のclassを追加した」には新たに返信することはできません。