wp_strip_all_tags()
職場のブログでタイトルを3行に分け書きしたいと思い、spanタグを入れてみたところ、意外と簡単に分け書きすることができた。見栄えも整えた。
ところがふとした拍子に気づいたのだけれど、twitterのシェアボタンの挙動に影響が出た。リンクurlに"text=タイトル"という形で属性を持たせてツイート欄に表示させているため、タイトルにタグが入るとツイート欄にタグがそのまま出力されてしまい、ちょっとみっともない。
タグを削除できるか、やってみた。シェアボタンの記述を探したところ、テーマファイルの一つに記述をみつけた。
使われているPHPは
echo $title_encode
となっている。タグ除去の方法としてはwebで調べてみるとwp_strip_all_tags()メソッドが使えるらしい。
echo wp_strip_all_tags($title_encode)
ところがこれはうまくいかなかった。たぶんencodeの絡みかなー、と思ったらやっぱりそうだった。$title_encodeの出所を探ると、こんな感じだった。
$title_encode = urlencode(get_the_title());
urlencode()の処理内容を確認すると「-_. を除くすべての非英数文字が % 記号 (%)に続く二桁の数字で置き換えられ」とある。
-_. を除くすべての非英数文字が % 記号 (%)に続く二桁の数字で置き換えられ --via PHP: urlencode - Manual PHP: urlencode - Manual
記号を置き換えたものがタグと認識されないので、wp_strip_all_tags()でやってみても、あるいはPHPのstrip_tags()でやってみてもダメなわけだ。
要するに、「urlencode→タグ除去」ではタグがタグと判定できない。「タグ除去→urlencode」に順番を変えればいいわけだ。$title_encodeを直接書き換えてもいいが、他に影響が出ると困るので変数を増やすことにした。
$title_encode2 = urlencode(wp_strip_all_tags(get_the_title()));
get_the_title()でタグ付きのタイトルを取り出したら、wp_strip_all_tags()でタグを除去し、それからurlencode()にかける。
これでうまくタグを除去してtwitterに渡すことができるようになった。
ああよかった。