• 解決済 san3san

    (@sansanko)


    お世話になります。

    カテゴリ一覧を表示する際に、カテゴリ名を空白で自動改行する方法をご教授ください。

    過去記事のこちらこちらで、タイトル名を改行する方法がありましたが応用方法が分かりません。

    <?php
    $args = array( 'taxonomy' => 'category' );
    $break = str_replace(' ','<br />',wp_list_categories($args));
    echo $break;
    ?>

    上記のように試してみましたが、
    普通にwp_list_categories()で表示するのと変わりませんでした。
    サイドバーのメニューで見た目を整える目的のため
    改行したいのはリスト表示の時のみです。

    補足ですが、カテゴリ名は「0000 全角ワード」のように
    数字4桁+半角+全角文字というフォーマットなので
    数字のあとに自動改行という指定でもよいのですが…。

    聞いてばかりで恐縮ですがよろしくお願いします。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • sansankoさんはじめまして

    まず、このようにphp自体の関数で文字を入れ替えたりする場合には
    wordpressのタグが直接表示するものか、「echo」をしなければ表示できないものなのか
    ということを注意する必要があります。

    http://wpdocs.sourceforge.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/wp_list_categories
    こちらの「使い方」を見ると
    <?php wp_list_categories( $args ); ?>
    だけで表示できてしまっているので提示されたコードの3行目で置き換えるつもりで書いた
    タグで直接表示されてしまっているわけです。

    これをphpの変数に渡したりする場合はwordpressではよく
    the_○○とget_the_○○で区別されていますがリファレンスを見るとこの場合は
    $argに「echo」で指定してやればいいようですので

    $args = array( 'taxonomy' => 'category','echo'=>false );
    でいけると思います。
    ただ、この場合は全ての半角スペースが<br />に置き換わってしまいますが・・・

    トピック投稿者 san3san

    (@sansanko)

    jdbbさん
    さっそくありがとうございます。
    直接表示するものか、しないものかですね。納得しました。

    やってみたところ、確かに半角アキは
    に置換されたのですが
    カテゴリ名だけでなく、htmlの一連のソース全体が対象になって
    <li class=””>やの半角まで
    に置換されて出力されてしまいました。

    なんとなくそうなる心配は薄々感じていたのですが、やはり…。
    こういう場合はfunction.php内にカテゴリ名のみを対象にした記述をするのでしょうか。

    トピック投稿者 san3san

    (@sansanko)

    すみません。投稿内で不注意でaタグを使ってしまいました。
    <a href=””>の半角まで です。

    やはりそうなりますよね。
    この場合は
    str_replaceではなく
    preg_replaceを使います。
    が・・・ちょっと難しいですね。
    どなたか正規表現の詳しい人はいないでしょうか

    数字4桁の後ろの半角スペースをbrに置換するのでしたら、以下でどうでしょうか?
     

    $cat_lists = wp_list_categories($args);
    echo preg_replace('#([0-9]{4}) ([^<]+)(?=</li>)#', '$1<br>$2', $cat_lists);

    トピック投稿者 san3san

    (@sansanko)

    jdbbさん
    popupさん
    ありがとうございます。

    数字4桁の後ろで改行するコードをコピーして試しましたが
    結果は普通に改行無しのままでした。
    それ以前に何が書かれているのか理解できず。
    (([^<]+)(?=) のあたりや、$1 $2 が出てくるあたり)
    マニュアルなど調べましたがそれでもさっぱり分かりません。

    wp_list_categories()の$argsでechoを0に指定してありますよね?
    カテゴリー名がリンクになっているのでしたら、次のコードで出来ると思います。(リンクのことを忘れていました。)
     

    $cat_lists = wp_list_categories($args);
    echo preg_replace('#([0-9]{4}) ([^<]+)(?=</a>\n*</li>)#', '$1<br>$2', $cat_lists);

     
    ‘([^<]+)’や'(?=</a>\n*)’はすべて正規表現ですので、正規表現で検索して調べてみてください。
    PHPのpreg系の関数は、Perl互換の正規表現が利用出来ます。
     
    ‘[^<]+’・・・'<‘以外の文字列1文字以上
    ‘(?=パターン)’・・・後ろに’パターン’が続く場合
    置換文字列で$nを使うと、()でグループ化した文字列を利用出来ます。
     
    PCRE(ver 4.x)で使用できる正規表現演算子 – 正規表現メモ

    トピック投稿者 san3san

    (@sansanko)

    popupさん
    ありがとうございます。

    ‘echo’=> 0 に指定済みですが、まだ結果はそのまま変わらずです。
    $argsでデフォルトのカウント数表示を指定しているので
    出力は半角スペース(数字)です。
    ここが問題なのですよね。更にやっかいになってしまいました。

    (?=</a>\n*</li>) の部分を
    (?=</a> ([0-9])\n*</li>)
    (?=</a>\s(\d)</li>)
    (?=</a>\s(\d)\n*</li>)
    などと分からないながらもいろいろ試してみましたが、
    結果はどれも変わらず同じでした。

    自分には身に過ぎたことをしたがっていると気づいて既にギブアップ気味です。

    トピック投稿者 san3san

    (@sansanko)

    すみません。
    aタグとliタグを本文中に使ってしまいました。

    5行目
    出力は</a>半角スペース(数字)</li> です。

    トピック投稿者 san3san

    (@sansanko)

    あともうひとつ問題が。
    リンクの出力時にwordpressのデフォルトで title=””も出力されているので
    カテゴリ名の「0000+半角スペース+文字列」が
    title=”「0000+半角スペース+文字列」+半角スペース+に含まれる投稿をすべて表示”
    という感じで出力されてしまっています。
    これも問題ですよね。

    粘ってお願いするのも申し訳ないので諦めようかと考えています。

    title属性を考慮していませんでした。
    次で試してみてください。(カウント数表示も対応させました。)
     

    $cat_lists = wp_list_categories($args);
    echo preg_replace('#(>\s*[0-9]{4}) ([^<]+)(?=</a> ?\([0-9]+\)?\n*</li>)#', '$1<br>$2', $cat_lists);

     
    上記は、以下のようなリストタグが出力されている場合に置換されるようになっています。
    これでも上手く置換されない場合は、置換対象のHTMLソースをコピーして知らせてください。 

    <ul>
    <li><a href="http://~" title="0010 記事タイトル1">0010 記事タイトル1</a> (6)
    </li>
    <li><a href="http://~" title="0016 記事タイトル2">0016 記事タイトル2</a> (11)
    </li>
    ...
    </ul>

    トピック投稿者 san3san

    (@sansanko)

    popupさん

    完璧です。狙い通りの改行ができました。
    おかげさまで、自分でコードを書くのは無理でも
    何が書いてあるかくらいは理解できるようになりました。
    本当に感謝です。ありがとうございました!

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • トピック「カテゴリ一覧を表示の際、空白で自動改行させたい」には新たに返信することはできません。