Because We Love Happy Coding

フリーライターがPHPとかJavaとか勉強してます

Wordpress記事タイトルにタグを入れたら、twitterシェアボタンのツイート欄にタグが出ちゃった話

wp_strip_all_tags()

職場のブログでタイトルを3行に分け書きしたいと思い、spanタグを入れてみたところ、意外と簡単に分け書きすることができた。見栄えも整えた。

blog.aibri.co.jp

ところがふとした拍子に気づいたのだけれど、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に渡すことができるようになった。

ああよかった。