WordPressのプラグイン「Welcart」でECサイトの構築を行なっているんですが、
少しハマったことがあったので備忘録です。
Sponsored Link
いつもWordPressでWebサイトを構築するときは管理のしやすさからテーマファイルとは別に設定用のファイルを作り、テーマファイルに読み込ませて使うようにしています。今回も設定ファイルを読み込ませようとしたんですが、何をどうしても全く読み込まず困り果てていました。
この記事の目次
設定ファイルを何に使うのか?
ではこの設定ファイル、何のために使うのか?というと・・・
例えばデフォルトの投稿形式「post」のみサイドバーを表示したい、といった場合は条件分岐を行いますよね?デフォルトの条件分岐は「is_category()」や「is_archive()」の一覧、「is_single()」の記事ページでだけではなく、「is_search()」や「is_tag()」などかなりの数の条件を記述しなければいけません。
具体的には以下のようなものをテンプレートごとに記述することになります。
PHP
<?php
if ( is_archive() || is_category() || is_single() || is_tag() || 〜 などなど 〜 ) {
//処理
}
>
これを毎回記述していたら面倒ですよね?だから「デフォルトの投稿タイプの場合、固有の変数に値を入れて、それを元に条件分岐すればいいんじゃないかな?」と思いつきました。
PHP
<?php
if ( is_archive() || is_category() || is_single() || is_tag() || 〜 などなど 〜 ) {
$keishiki = 'blog';
}
>
これを設定ファイルに記述し、テンプレートに読み込みさえすれば、以下の条件分岐の記述だけで済みます。
PHP
<?php
if ( $keishiki == 'blog' ) {
//処理
}
>
圧倒的に楽ですね。
includeはどうやって行うのか?
以下が通常のテーマにTEMPLATEPATHを使ってincludeする方法です。
TEMPLATEPATHとは?
TEMPLATEPATHとは、WordPressで定義されている定数で、テーマフォルダまでのパスを取得してくれるものです。これをincludeの際に使用します。
PHP
<?php
include( TEMPLATEPATH . '/ini.php' );
>
先ほど設定ファイルとして記述したファイルに「ini.php」と名前をつけて保存し、テーマのディレクトリに配置しました。そのファイルを「include」で読み込んでいるわけです。
子テーマではTEMPLATEPATHが通用しない・・・。
今回最も困ったのは、このinclude、というより「TEMPLATEPATH」が全く機能しなかったこと・・・。
いつもはすんなり読み込んでくれるのに、今回は書けども書けども全く読み込まず困り果てていたんですが、まずはいつも制作している状況との違いを考えると「子テーマで制作している」くらいしか思いつかず、「子テーマは親テーマの上書きだよね?TEMPLATEPATHってもしかして親テーマのを取得してるの??」と気付きました。
TEMPLATEPATHは親テーマのパスを読み込んでいる。
これがビンゴ。子テーマの場合は「TEMPLATEPATH」ではなく、「STYLESHEETPATH」と記述する必要があったようです。
PHP
<?php
include( STYLESHEETPATH . '/ini.php' );
>
これが正解でした。
Welcartを使ってのECサイト構築なので子テーマを使用して制作をした方が何かと安全なんですが、いかんせん子テーマなんぞ制作したこともなく、親テーマを部分的に上書きするやつでしょ??くらいの知識だったため非常に時間を使ってしまいました・・・。
・・・ちゃんと子テーマの勉強をしよう・・・。