the_title_attributeの使い方と引数を入れたら動かない時のメモ【ワードプレス】
the_title_attributeは、HTMLの属性で使いやすいクリーンな文字列でページタイトルを表示してくれるテンプレートタグです。よく使う例としては、aタグのtitle属性やimgタグのalt属性などにタイトルを入れる時でしょうか。
しかしこの関数、私だけかもしれませんが、取得だけしようとしたりすると「あれ?動かない」となりやすい。
という事で、今回はthe_title_attribute()の使い方と引数を入れたら動かないという場合の為のメモです。
~ 目次 ~
the_title_attributeで指定できるパラメータ
基本的な内容ですが、the_title_attributeで指定できるパラメータの一覧です。
before
タイトルの前に文字列を付けられます。
the_title_attributeは、処理の過程でPHPの関数strip_tags()を使用してHTMLタグを取り除きます。ですのでbeforeパラメータにHTMLタグを入れても消去されてしまいます。
初期値は無し(空文字列)です。
after
タイトルの後に文字列を付けられます。beforeパラメータと同じく、HTMLタグは付けられません。
初期値は無し(空文字列)です。
echo
echoパラメータは真偽値(trueかfalseか)です。取得だけするのか、出力(echo)までするのかを選択できます。
falseで文字列を返すのみ、trueだと文字列を取得した後で出力(echo)まで行います。
初期値はtrueです。
post
投稿IDを数値かオブジェクトで指定します。
初期値はコード上ではget_post()となっており、つまり現在の投稿のタイトルとなります。
引数はクエリ文字列タイプ
the_title_attributeは、たいして引数(パラメータ)が多いわけでもありませんが、なぜか引数がクエリ文字列タイプとなっています。「the_〇〇」という名前の、出力してくれちゃう系テンプレートタグには珍しい気がします。
このせいで(私は)うっかり書き間違えてリンクのツールチップを空にしてしまったりしがちです。
クエリ文字列型パラメータとは
その名の通りなのですが、クエリ文字列の形で引数を指定できます。URLのクエリ(パラメータ)をイメージすればわかりやすいと思います。たくさんのパラメータを渡せる関数の場合、必要なパラメータだけ指定する事ができるので簡潔に記述できて便利です。
the_title_attributeのパラメータの書き方
実際にthe_title_attributeのようなクエリ文字列型の関数にパラメータを渡す場合の書き方です。
1 |
the_title_attribute('before=前のテキスト&after=後のテキスト&echo=0'); |
URLパラメータみたいですよね。よくあるPHP関数型のパラメータの指定方法とは、ちょっと違います。全体をクォーテーションで囲って、「&」で区切って一気に書きます。ただ、PHPをいじってる時にこの書き方はちょっとややこしいですよね。「&」を入れ忘れたり、文字列にクォーテーションとか付けたくなっちゃいます。抵抗がある場合は下のような書き方もできます。
おすすめの書き方
1 |
the_attribute(array('before'=>'前のテキスト','after'=>'後のテキスト','echo'=>0)); |
配列でキー(パラメータ名)に値を入れます。クォーテーションやら文字数は増えますが、私はこっちの方が書きやすいかも。
どちらの書き方でも、必要な値だけ指定すればいいですし、指定する順番も気にする必要はありません。
echoパラメータで出力を切り替える方法
ここも間違えやすいポイント。
基本的にtrueで出力(echo)までやってくれ、falseなら取得するのみなのですが、取得だけしたい場合の指定方法は下の様になります。
1 |
the_title_attribute('echo=0'); |
echoパラメータは0とするんですね。echo=falseではダメです。「なんでやねん?」と思った方は最後まで読んで下さい。
他の引数と組み合わせて使う時は、下の様になります。単純に「&」でつなげていきます。
1 |
the_title_attribute('before=【記事】&echo=0'); |
なぜecho=0なのか
ここからはちょっとマニアックな話かもしれませんので、気にならない人はecho=0と書くんだと覚えてしまえばいいと思います。
でも、出力するかを指定できるパラメータ「echo」は、初期値がtrueなのに「なんでecho=0と記述しないといけないの?」って思いませんか?「なんでfalseじゃないの?」と。the_title_attributeに限らず、引数がクエリ文字列型の関数では、真偽値の引数を変更する場合、必ず1か0かで書きます。初期値はtrueとかfalseなのに。
初期値がtrueかfalseなんだったら、echo=falseとか書いても良さそうですよね。ですが、これでは指定が効きません。なぜでしょう。
クエリ文字列型から配列への変換が原因
上の基本的な書き方で、パラメータをクエリ文字列型で記述する方法と配列で記述する方法をご紹介しました。クエリ文字列タイプで書いた場合、処理の過程でこれを配列に変換します。
具体的にはthe_title_attributeの内部で使用されているwp_parse_argsという関数が、クエリ文字列型のパラメータをwp_parse_strを使って配列に変換するという作業をしています。この時に真偽値だったtrueやfalseが文字列に変換されてしまいます。
真偽判定する時にはすべて文字列になっている
以上のような理由で、echo=falseと指定しても真偽判定をする時点では文字列のfalseになっており、echo=’false’と指定したのと同じになってしまいます。
echo=falseもecho=NULLもecho=999でも、すべて判定はtrueとなります。
だから文字列でfalseと判定される、空文字(echo=)やゼロ(echo=0)としなければいけないんですね。
配列で記述すればfalseでも平気
クエリ文字列型から配列への変換の際に文字列にされてしまうという事は、初めから引数を配列で指定してあげればどうでしょうか。この場合は、wp_parse_strは使用されません。
結果、下のように配列で指定すると、falseと書いてもちゃんと認識されます。
1 |
the_title_attribute(array('echo'=>false)); |
最後に
the_title_attributeの基本的な事を書こうと思って書き始めましたが、ちょっとマニアックな記事になってしまいました。
直感的に書けるという点では、最初からパラメータを配列で指定してあげるのもいいかもしれませんね。
ちなみに最近まで知らなかったのですが、the_titleもthe_title_attribute同様に、引数がクエリ文字列型でした。取得だけしたい場合はget_the_titleを使用してしまい、引数なんて使用したことが無く気が付きませんでした。。
[…] the_title_attributeの使い方と引数を入れたら動かない時のメモ【ワードプレス】 […]