こんにちは。とみっちです。
WordPressを使っていて、ページ共通で表示させたいPHPファイルってありますよね。
特に、

と考えカスタムしてみました。
今回はPHPファイルの読み込み方法を紹介します!
クリックでジャンプ
PHPファイルをincludeするとはなんぞ
WordPressはPHPで動いているので、ヘッダー部分は「header.php」、フッターは「footer.php」、記事ページは「single.php」といった別のファイルを複数読み込んで画面を表示するようになっています。
これなら全ページのヘッダーを変更したいと思った時に、ヘッダー用の1ファイルをいじっただけで、全ページのヘッダーの変更ができるわけです。

PHPファイルから、別のPHPファイルをinclude_once関数やrequire_once関数を使って読み込むことができます。
サイドバーに、自分で用意したPHPファイルを読み込ませたいなーと思ったら、sidebar.phpのファイル内で別のPHPファイルをinclude_once関数で読み込んであげればOKです。
例えば、「sidebar.php」というファイルから、同階層においてある「inc」ディレクトリ内の「sidebar-author.php」というファイルを読み込むとすると、
<div class="widget widget_text">
・
・
・
<?php include_once("inc/sidebar-author.php"); ?>
・
・
・
</div>
こんな感じになります。
単なるinclude関数や、require関数というものもあるんですが、
こういった理由で、重複読み込みを回避できるinclude_once関数を使うのがおすすめです。
PHPファイルをincludeすると便利そうなこと
WordPressで別のPHPファイルを読み込めたら便利そうなことを書いてみます。
- HTMLソース内に書くタグを別ファイルにして分かりやすくできる
- アドセンスや、アフィリエイト広告をPHPファイルに書いて一元管理
- APIで他サービスのデータを取得して表示する場合などの処理
- 「俺、WordPressでPHPをincludeできるんだぜ」と得意になれる
別ファイルにして分かりやすく
僕がやっているのは以下のような感じです。
WordPressのテンプレート用のファイルが並ぶ中、読み込むものは「inc」ディレクトリの中に格納するといいなと思って、「inc」ディレクトリを作りました。
通常、テーマファイルは「/hone/user/xxxxx.com/wp-content/themes/(テンプレート名)」といった場所に格納されていますよね。
functions.php
header.php
home.php
・
・
・
inc
・
・
・
そして、自分で作った「inc」ディレクトリの中には、
asp_rotation_ad_school.php
asp_rotation_ad_wifi.php
google_tag_manager.php
youtube.php
・
・
・
といった名称でPHPファイルをたくさん置いています。
GoogleタグマネージャーやGoogle Analyticsのタグだったら、外部ファイルにしてこんな風書いておくと分かりやすくなりますよ。
まずは、「inc/google_tag_manager.php」というファイルを用意して、
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=XXX-XXXXXX" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E(function(w%2Cd%2Cs%2Cl%2Ci)%7Bw%5Bl%5D%3Dw%5Bl%5D%7C%7C%5B%5D%3Bw%5Bl%5D.push(%7B'gtm.start'%3A%0Anew%20Date().getTime()%2Cevent%3A'gtm.js'%7D)%3Bvar%20f%3Dd.getElementsByTagName(s)%5B0%5D%2C%0Aj%3Dd.createElement(s)%2Cdl%3Dl!%3D'dataLayer'%3F'%26l%3D'%2Bl%3A''%3Bj.async%3Dtrue%3Bj.src%3D%0A'%2F%2Fwww.googletagmanager.com%2Fgtm.js%3Fid%3D'%2Bi%2Bdl%3Bf.parentNode.insertBefore(j%2Cf)%3B%0A%7D)(window%2Cdocument%2C'script'%2C'dataLayer'%2C'XXX-XXXXXX')%3B%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
<!-- End Google Tag Manager -->
そんで、読み込ませたい「header.php」などの中に、
<body <?php body_class(); ?>>
<?php include_once("inc/google_tag_manager.php"); ?>
<div id="container" class="<?php echo esc_html(get_option('post_options_ttl'));?> <?php echo esc_html(get_option('side_options_sidebarlayout'));?> <?php echo esc_html(get_option('post_options_date'));?>">
<?php if(!is_singular( 'post_lp' ) ): ?>
これでOKです。「include_once」を書いた行ですね。
自分の書いたプログラムって、しばらくするとどうしても忘れちゃって、あのタグどこに書いたっけなー…ってなりがちなんですよね。
「google_tag_manager.php」というファイルがあれば、そうだ、ここを書き換えればいいのか!
となります!
アドセンスや、アフィリエイト広告のファイルを一元管理
毎回同じ広告を表示するのではなくブログのサイドバーに表示する広告をローテーションで表示させたくなることもあると思います。
そんな時は、「sidebar.php」内でinclude_onceしてあげます。
sidebar.phpの例
<div class="sidebar">
<div class="sidebar__block">
・
・
・
<?php include_once("inc/asp_rotation_ad_car.php"); ?>
</div>
・
・
・
</div>
asp_rotation_ad_car.phpの例
<?php
/**
* ASPの広告タグをランダムに表示
*/
// 車の広告1
$ad1 = <<< EOM
(ここに広告のHTMLタグを記述)
EOM;
// 車の広告2
$ad2 = <<< EOM
(ここに広告のHTMLタグを記述)
EOM;
// 車の広告3
$ad3 = < EOM
(ここに広告のHTMLタグを記述)
EOM;
// 1〜3の間でランダムの数値を取得
// ローテーションしたい広告が5個ならrand(1, 5)
$ad_num = rand(1, 3);
echo ${'ad' . $ad_num};
EOM〜EOMの間には、クォーテーションマークなどのエスケープを気にせずにHTMLをそのまま書けます。
PHPが使えれば、もっと厳密なプログラミングでローテーション広告を表示したり、記事のカテゴリに応じて広告群を切り替えたりと自由自在です。
PHPを勉強することは超おすすめ!
WordPressの記事ページや固定ページで読み込む方法
WordPressの記事ページや固定ページを読み込むカスタマイズはこの記事を参考にしました。
設定が終われば記事ページで、例えば、
[php_inc file='asp_ad_001']
のようにして「asp_ad_001.php」を読み込めるようになります。
例えば、広告を全部張り替えなければいけない、修正しなければならないような場面で超絶に便利!
みたいなことが書かれたブログを読むたびに、PHPで一元管理すればいいのにと思うわけです。
ショートコードでPHPを読み込む
WordPressの記事中に、Google Adsense広告を表示したい場合は、上記で紹介した方法よりも、ショートコードを使ったやり方が一般的ということが分かりました。
最近はWordPressのPost Snippetsプラグインを愛用しています。