今、ブログを始めようとしている方、
今なら、ConoHaサーバーの「WINGパックプラン」が最大55%OFF!
「1,452円/月」が「643 円/月」の「低コスト」で始められるチャンスとなっております!
お申し込みはこちらから!
ConoHa WINGは国内最速の高性能レンタルサーバーサービスで
初期費用無料、最低利用期間無しでご利用いただけます!
(この記事は2022年4月18日に投稿されました。)
WordPresssで記タグが付いて(表示されて)いる記事のみに処理を行うにはhas_tag()を使用します。
has_tag()とは、現在の記事にタグがついているかどうかをチェックすることができるWordPress関数であり、「true」か「false」の真偽値を返すようになります。
そして、has_tag()はパラメータを最大2つまで指定することができ、チェックする範囲を制限することができます。
また、has_tag()のパラメータや使い方次第で1つのタグから、2つ以上のタグをチェックすることができるので、タグを条件にして処理を分岐させるには持ってこいです。
また、ソースコードのセキュリティ向上にも役に立つ関数なので、タグを使用して処理を行う場合は、has_tag()をフィルターとして使用しましょう。
今回はWordPressでタグが付いて(表示されて)いる記事のみに処理を行うhas_tag()について紹介していきます。
・「A」のタグを持つ記事と「B」のタグを持つ記事で表示するものを変えたい人
has_tag()とは
has_tag()とは、現在の記事にタグがついているかどうかを確認することができるWordPressの関数となります。
もし、タグを持っているなら「true」を、持っていないなら「false」が返されるようになります。
もし、タグについてあまり知らないという場合は、下記の記事に詳しく書いておりますにでご参考ください。
has_tag()の書き方
has_tag()は下記のように書きます。
1 | <?php has_tag( 'タグ', '投稿記事'); ?> |
has_tag()はtrueかfalseを返すため、基本的にif文のような条件式で使用することがほとんどです。
has_tag()のままでもタグがついているかどうかを確認することができますが、パラメーターを指定することで、確認したい記事やタグを絞ることができます。
has_tag()のパラメータ
has_tag()のパラメータについて紹介します。
確認したいタグをスラッグで指定する
⚫︎ 投稿記事:
タグを持っているかどうか確認したい記事をIDで指定する
has_tag()は最大で2つパラメータをつけることができます。
1番目のパラメータである「タグ」は指定したタグがついているかどうかを確認することができます。
2番目のパラメータである「投稿記事」は指定した投稿記事にタグがついているかどうか確認することができます。
has_tag()でタグが付いて(表示されて)いる記事のみに処理を行ってみた
実際にhas_tag()を使って、特定のタグが付いて(表示されて)いる記事のみに処理を行ってみました。
タグは基本、投稿記事につけることができますので、single.phpに追記してみます。
タグを持っている投稿記事に処理を行う場合
タグを持っている投稿記事に処理を行う場合は、has_tag()にパラメータを指定しない状態で使用します。
⚫︎ single.php
1 2 3 4 5 6 7 | <?php the_tags(); $message = <p style= "font-weight:bold;">has_tag()で処理が行われる</p>'; if (has_tag()) { echo $message; } ?> |
実行結果
has_tag()によってタグを持っている記事に対して処理が行われるようになります。
そのため、タグを持つ記事に文字列が表示されてます。
特定のタグを持っている投稿記事に処理を行う場合
特定のタグを持っている投稿記事に処理を行う場合は、has_tag()のパラメータに「タグ」を指定します。
⚫︎ single.php
1 2 3 4 5 6 7 8 | <?php the_tags(); $message = '<p style= "font-weight:bold;">「初心者OK」のタグを持つ記事のみhas_tag()で処理が行われる</p>'; if (has_tag('beginner')) { echo $message; } ?> |
実行結果
has_tag()によって特定のタグを持つ記事のみ処理が行われるようになっています。
そのため、「初心者OK」のタグを持つ記事のみに文字列が表示されてます。
特定のタグを持っている特定の投稿記事のみに処理を行う場合
特定のタグを持っている特定の投稿記事のみに処理を行う場合は、has_tag()のパラメータに「タグ」と「投稿記事」を指定します。
⚫︎ single.php
1 2 3 4 5 6 7 | <?php the_tags(); $message = '<p style= "font-weight:bold;">「初心者OK」のタグを持つ記事のみhas_tag()で処理が行われる</p>'; if (has_tag('beginner', '109')) { echo $message; } ?> |
実行結果
has_tag()によって指定した投稿記事に指定したタグを持っている場合のみ処理が行われるようになっています。
そのため、「フットサル」の記事に「初心者OK」というタグがついているため文字列が表示されてます。
タグが付いて(表示されて)いない記事にhas_tag()を使用した場合
タグが付いて(表示されて)いない記事にhas_tag()を使用すると、「false」を返すようになります。
そのためif文では、else側で処理が行われるようになります。
下記のようなコードで検証してみます。
⚫︎ single.php
1 2 3 4 5 6 7 8 9 10 11 | <?php the_tags(); $message1 = '<p style= "font-weight:bold;">タグを持つ場合の処理</p>'; $message2 = '<p style= "font-weight:bold;">タグを持っていない場合の処理</p>'; if (has_tag()) { echo $message1; } else { echo $message2; } ?> |
実行結果
タグを持っていない記事であるため、has_tag()は「false」を返しelseの処理を通っています。
そのため、「タグを持っていない場合の処理」と言う文字列が表示されています¥。
has_tag()は条件式として利用されることが多いので、タグを持っている記事とタグを持っていない記事とで処理を分けることができますね。
has_tag()で複数のタグが付いて(表示されて)いる記事に処理を行う場合
has_tag()で複数のタグが付いて(表示されて)いる記事に処理を行うには下記の2つの方法があります。
・has_tag()の論理演算子を条件式にする
言葉だけでは理解しにくいと思いますので、それぞれの方法について詳しくご紹介していきます。
has_tag()のパラメータを配列で指定する
まず、1つ目はhas_tag()のパラメータを配列で指定する方法です。
has_tag()のパラメータである、「タグ」を配列の形式で指定することで指定した複数のタグを持っているかどうか確認することができます。
配列とは簡単に言うと、複数の値を格納することができる箱みたいなものであり、そこに複数のタグを入れて1つのパラメータとして指定することができます。
すると、下記のようなコードになります。
⚫︎ single.php
1 2 3 4 5 6 7 8 9 10 11 | <?php the_tags(); $message1 = '<p style= "font-weight:bold;">該当する2つのタグのどちらかを持つ場合の処理</p>'; $message2 = '<p style= "font-weight:bold;">該当する2つのタグを持っていない場合の処理</p>'; if (has_tag(array('tag2','tag3'))){ echo $message1; } else { echo $message2; } ?> |
実行結果
has_tag()を配列で指定した結果、「true」を通っています。
今回は「個人」と「ハラハラ」のタグのどちらかを持っているかどうかを確認し、「個人」のタグを持っていることから、「該当する2つのタグのどちらかを持つ場合の処理」という文字列が表示されています。
has_tag()のパラメータのタグを配列で指定することで、複数のタグで確認することができます。
また、今回はどちらか持っている場合に「true」を通っていますが、指定したタグがすべてついている記事でも「true」を通るようになります。
has_tag()の論理演算子を条件式にする
そして、2つ目は、has_tag()の論理演算子を条件式にする方法です。
論理演算子とは、「and」や「or」など条件式を追加したい時に使用する演算子です。
そのため、has_tag()を複数回使用し、それを論理演算子で繋ぐことで複数のタグが付いているか確認することができます。
すると、下記のようなコードになります。
⚫︎ single.php
1 2 3 4 5 6 7 8 9 10 11 | <?php the_tags(); $message1 = '<p style= "font-weight:bold;">該当する2つのタグのどちらかを持つ場合の処理</p>'; $message2 = '<p style= "font-weight:bold;">該当する2つのタグを持っていない場合の処理</p>'; if ((has_tag('tag2')) || (has_tag('tag3'))) { echo $message1; } else { echo $message2; } ?> |
実行結果
それぞれのhas_tag()でタグを指定し、論理演算子で繋げた結果、「true」を通っています。
今回も「個人」と「ハラハラ」のタグのどちらかを持っているかどうかを確認し、両方のタグを持っていることから、「該当する2つのタグのどちらかを持つ場合の処理」という文字列が表示されています。
has_tag()を論理演算子で繋げることでも、複数のタグで確認することができます。
has_tag()はソースコードのセキュリティ向上にも効果的
has_tag()はソースコードのセキュリティ向上にも効果的です。
例えば、下記のようなAとBのコードが「single.php」にあった場合、どちらのコードが良いと思いますか?
⚫︎ Aのコード
1 2 3 4 5 6 7 8 9 10 11 12 | <?php while ( have_posts() ) : the_post(); ?> <main> . . . . <?php the_tags(); ?> </main> <?php endwhile; ?> |
⚫︎ Bのコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php while ( have_posts() ) : the_post(); ?> <main> . . . . <?php if (has_tag()) { the_tags(); } ?> </main> <?php endwhile; ?> |
僕は「B」の方が良いかと思います。
the_tags()はその記事についているタグを表示する関数になり、タグを持っていない場合は何も表示されません。
そのため、Aのコードだとタグの有無関係なくthe_tags()の処理が走るようになります。
それに比べてBはhas_tag()でタグを持っているかどうか一度チェックが入るため、タグを持っている記事のみthe_tags()の処理が走るようになります。
つまり、has_tag()を使用することで、余計な処理をしなくて済むということがわかります。
余計な処理をしなくて良いということは処理速度の改善にも繋がったり、バグが起きる確率が低くなるので、より安全に処理を行うことができます。
そのため、もしものためにタグ関係で処理する場合はhas_tag()でフィルターをつけておきましょう。
もし、the_tags()について詳しく知りたい場合は、下記の記事をご参考ください。
まとめ
⚫︎ has_tag()とは、現在の記事にタグがついているかどうかを確認することができるWordPressの関数である
⚫︎ has_tag()のパラメータは下記の2つを指定できる
・タグ
・投稿記事
⚫︎ has_tag()でタグを持っている投稿記事に処理を行う場合はパラメータなしで使用する
⚫︎ has_tag()で特定のタグを持っている投稿記事に処理を行う場合は「タグ」のパラメータを指定して使用する
⚫︎ has_tag()で特定のタグを持っている特定の投稿記事のみに処理を行う場合は「タグ」と「投稿記事」のパラメータを指定して使用する
⚫︎ タグが付いて(表示されて)いない記事にhas_tag()を使用すると、「false」を返すようになる
⚫︎ has_tag()で複数のタグが付いて(表示されて)いる記事に処理を行うには下記の2つの方法がある
・has_tag()のパラメータを配列で指定する
・has_tag()の論理演算子を条件式にする
⚫︎ has_tag()はソースコードのセキュリティ向上にも効果的