今回は、WordPressカスタマイズでもっとも重要なファイル functions.php について紹介します。
functions.php とは
WordPress をカスタイマイズするうえで functions.php は、もっとも重要なファイルです。
WordPressでな、すべての処理において functions.php に記載されたプログラムを実行します。
ウェブサイトを表示するときも、管理画面で編集するときも、どんな状況でも functions.php に書かれた処理が実行されます。
したがって、「独自の関数を作りたい」「管理画面の見た目をカスタイマイズしたい」など、WordPress に対して独自の処理を行いたい場合は、その処理を functions.php に記述します。
functions.php の場所
functions.php は style.cssと同じ場所に作成します。
-
wp-admin
ここにはWordPressの管理画面に関するファイルが保存されています。このフォルダ内のファイルは変更・削除しないでください。
-
wp-content
-
languages
多言語対応時に翻訳情報が保存されたフォルダ。このフォルダ内のファイルは変更・削除しないでください。
-
plugins
インストール済プラグインが保存されたフォルダ。このフォルダ内のファイルは変更・削除しないでください。
-
themes
-
twentytwentyfour
「Twenty Twenty-Four」テーマが保存されたフォルダ
-
twentytwentythree
「Twenty Twenty-Three」テーマが保存されたフォルダ
-
mytheme
- functions.php
- index.php
- style.css
-
-
upgrade
WordPressのアップデート情報が保存されたフォルダ。このフォルダ内のファイルは変更・削除しないでください。
-
uploads
管理画面からアップロードしたメディア(画像・動画など)が保存されたフォルダ。このフォルダ内のファイルは変更・削除しないでください。
-
-
wp-admin
ここにはWordPressのシステムファイルが保存されています。このフォルダ内のファイルは変更・削除しないでください。
functions.php の使い方
#0020 - ウェブページのタイトルを共通化しよう で紹介した、titleタグの出力を例に functions.php の使い方を紹介します。
おさらい
トップページおよび固定ページの階層に応じて titleタグの出力を切り替える処理を header.php にしました。
<!DOCTYPE html>
<html>
<head>
<?php
if (is_front_page()){
// トップページだったら
$title = get_bloginfo('name');
} else {
$title = get_the_title(); // 今表示しているページのタイトルを取得
$current_id = get_the_ID(); // 今表示しているページのページIDを取得
$ancestors = get_post_ancestors($current_id); // 今表示しているページの親ページを取得
if(!empty($ancestors)){ // 親ページがあるか判定
foreach ($ancestors as $ancestor) { // 親ページの個数分繰り返す
$title = $title . '|' . get_the_title($ancestor); // 親ページのタイトルを付け加える
}
}
$title = $title . '|' . get_bloginfo('name'); // サイト名を付け加える
}
?>
<title><?php echo $title;?></title>
<link rel="stylesheet" type="text/css" href="<?php echo get_template_directory_uri();?>'/style.css'">
</head>
5~20行目によって、やっとtitleタグが出力されます。
header.php は本来、共通のヘッダーを出力するファイルです。
タイトルを取得する処理を functions.php に任せて、header.php では取得したタイトルを表示するだけにした方がスッキリします。
functions.php でタイトルを取得する
タイトルを取得する処理を functions.php に移します。
<?php
// タイトルを取得する関数
function get_my_title(){
if (is_front_page()){
// トップページだったら
$title = get_bloginfo('name');
} else {
$title = get_the_title(); // 今表示しているページのタイトルを取得
$current_id = get_the_ID(); // 今表示しているページのページIDを取得
$ancestors = get_post_ancestors($current_id); // 今表示しているページの親ページを取得
if(!empty($ancestors)){ // 親ページがあるか判定
foreach ($ancestors as $ancestor) { // 親ページの個数分繰り返す
$title = $title . '|' . get_the_title($ancestor); // 親ページのタイトルを付け加える
}
}
$title = $title . '|' . get_bloginfo('name'); // サイト名を付け加える
}
return $title;
}
?>
3行目の function で、タイトルを取得する get_my_title関数を宣言します。
4~17行目は、header.php に記載した内容と同じです。
18行目の return で取得したタイトルを戻します。
この get_my_title関数を header.php から呼び出すには
<!DOCTYPE html>
<html>
<head>
<title><?php echo get_my_title();?></title>
<link rel="stylesheet" type="text/css" href="<?php echo get_template_directory_uri();?>'/style.css'">
</head>
とします。
4行目で、get_my_title関数を呼び出し get_my_title関数から戻ってきた値を echo関数で出力しています。
いかがでしょうか?
header.php がスッキリしました。
まとめ
今回は、functions.php の使い方を、独自関数の作り方を例に紹介しました。
functions.php には様々な使い方がありますので、今後紹介していきます。