こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
PHPエンジニアとして9年~の経験があります。
WordPressは内部で多くの関数が用意されています。調べれば「こんなものがあったのか!」と驚くことも。
サイトを細かく設定行く上で欠かせない、そんなWordPress関数をご紹介します。
何れも各ファイル、header.php、footer.php、sidebar.phpなどの「全表示で必ず使用するファイルや、functions.phpなどで多用します。
is_single()
個人的によく使用する第一位です。
「投稿ページかどうか」を判定します。返却はtrue/falseです。
使用例
// 投稿ページのみ、サイドバーを表示する
if(is_single()) {
get_sidebar(); // sidebar.phpを呼び出す
}
is_page()
こちらは「固定ページかどうか」を判定します。返却はtrue/falseです。
使用例
// 固定ページのみ、投稿日時を表示する
if(is_page()) {
echo date('y年n月d日', strtotime($post->post_date));
}
is_front_page()
「サイトのトップページ(固定ページ)かどうか」を判定します。返却はtrue/falseです。
使用例
// トップページはぱんくずを表示しない
if(!is_front_page()) {
// パンくずリストを表示する
}
is_home()
「最新投稿を表示しているトップページかどうか」を判定します。返却はtrue/falseです。
使用例
// 最新投稿の場合はサイドバーを表示する
if(!is_front_page() || is_home()) {
get_sidebar();
}
補足-is_front_pageとis_homeの違い
is_front_page()の如何にもトップページといった関数もあるので混乱しやすいのですが、is_home()はトップページの中でも、「最新の投稿を表示」状態かどうかを見ています。
サイトのトップページに「最新の投稿を表示」していると、is_front_page()では必ずfalseを返します。トップページなのに、falseです。
is_front_page()はあくまでトップページ設定されている固定ページを判定しています。最新の投稿を表示するトップページのときに処理させたい場合はis_home()で判定します。
ブログ型サイトでなければis_home()は使わないので、WordPress案件を請け負っていると案外見ない関数かもしれません。
こちらでも書いています。is_home()の罠-is_front_page()やis_single()との違い-
is_archive()
「カテゴリー、タグ、日付に関するアーカイブかどうか」を判定します。返却はtrue/falseです。
カテゴリー、タグ、日付それぞれでさらに細かいアーカイブを判定したい場合は後述のis_category() / is_tag() / is_date() で判定します。
使用例
// アーカイブの場合は、サイドバーを表示しない
if(!is_archive()) {
get_sidebar();
}
is_cartegory()
「表示中のページがカテゴリーアーカイブかどうか」を判定します。返却はtrue/falseです。
// カテゴリーアーカイブの場合は、サイドバーを別のものにする
if(is_category()) {
get_sidebar('category'); // 任意のサイドバーを指定
}
is_tag()
「表示中のページがタグアーカイブがどうか」を判定します。返却はtrue/falseです。
// タグアーカイブの場合は、サイドバーを別のものにする
if(is_tag()) {
get_sidebar('tag'); // 任意のサイドバーを指定
}
is_date()
「表示中のページが日付に関するアーカイブかどうか」を判定します。返却はtrue/falseです。
// 日付アーカイブの場合は、サイドバーを別のものにする
if(is_date()) {
get_sidebar('date'); // 任意のサイドバーを指定
}
補足-日付アーカイブを年、月、日、時間でそれぞれで分けたい
年別アーカイブか、月別アーカイブか、日付アーカイブか、時間アーカイブかのすべて判定することができます。
使いたいタイミングはそれほどないかもしれませんが、参考までに列挙しておきます。返却は何れもtrue/falseです。
is_year()
年別アーカイブを判定します。
is_month()
月別アーカイブを判定します。
is_day()
日付アーカイブを判定します。
is_time()
時間アーカイブを判定します。※今のところ、使用したことはありません。出現頻度は低いでしょう。
is_search()
「検索結果のページかどうか」を判定します。返却はtrue/falseです。
使用例
// 検索結果の場合は、テンプレートを変える
if(is_search()) {
get_template_part('contents'); // 任意のテンプレートを指定
}
is_404()
「404ページかどうか」を判定します。返却はtrue/falseです。
使用例
// 404の場合は、norobot nofollow
if(is_404()) {
echo '<meta name"robots"="" content="noindex, nofollow">';
}
is_page_template()
指定の固定ページテンプレートかどうかを判定します。返却はtrue/falseです。
テンプレート名は「aaa.php」のように、ファイル拡張子まで記述します。
使用例
// 指定テンプレートの場合は追加でCSSを読み込む(functions.phpなどで使用)
if(is_page_template('inquiry.php')) {
wp_enqueue_style('inquiry-style', $template . '/inquiry.css');
}
is_author()
「表示中のページが著者別アーカイブかどうか」を判定します。返却はtrue/falseです。
使用例
// 著者別アーカイブの場合はトップページにリダイレクト(functions.phpなどで使用)
if(is_author()) {
wp_redirect( home_url());
exit;
}
補足-セキュリティとしては、著者別アーカイブは使用しない方が望ましい
著者別アーカイブを使用すると、URLで著者名、即ちWordPressのログインIDがわかってしまいます。そのため、必要がなければ著者別アーカイブは使用しない方が望ましいです。
使用しない場合、テーマ内ファイルに記述を追加する必要があります。WordPressのデフォルトは著者別アーカイブも表示します。