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 />
に置き換わってしまいますが・・・
jdbbさん
さっそくありがとうございます。
直接表示するものか、しないものかですね。納得しました。
やってみたところ、確かに半角アキは
に置換されたのですが
カテゴリ名だけでなく、htmlの一連のソース全体が対象になって
<li class=””>やの半角まで
に置換されて出力されてしまいました。
なんとなくそうなる心配は薄々感じていたのですが、やはり…。
こういう場合はfunction.php内にカテゴリ名のみを対象にした記述をするのでしょうか。
すみません。投稿内で不注意で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);
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)で使用できる正規表現演算子 – 正規表現メモ
popupさん
ありがとうございます。
‘echo’=> 0 に指定済みですが、まだ結果はそのまま変わらずです。
$argsでデフォルトのカウント数表示を指定しているので
出力は半角スペース(数字)です。
ここが問題なのですよね。更にやっかいになってしまいました。
(?=</a>\n*</li>) の部分を
(?=</a> ([0-9])\n*</li>)
(?=</a>\s(\d)</li>)
(?=</a>\s(\d)\n*</li>)
などと分からないながらもいろいろ試してみましたが、
結果はどれも変わらず同じでした。
自分には身に過ぎたことをしたがっていると気づいて既にギブアップ気味です。
すみません。
aタグとliタグを本文中に使ってしまいました。
5行目
出力は</a>半角スペース(数字)</li> です。
あともうひとつ問題が。
リンクの出力時に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>
popupさん
完璧です。狙い通りの改行ができました。
おかげさまで、自分でコードを書くのは無理でも
何が書いてあるかくらいは理解できるようになりました。
本当に感謝です。ありがとうございました!