[WordPress]子テーマ内のphpのincludeには、TEMPLATEPATHではなくSTYLESHEETPATHを使おう。 - スニペット | WordPress・jQuery・HTML・CSSのスニペット集 WEBCRE8TOR.COM

WEBCRE8TOR.COM

[WordPress]子テーマ内のphpのincludeには、TEMPLATEPATHではなくSTYLESHEETPATHを使おう。

WordPressのプラグイン「Welcart」でECサイトの構築を行なっているんですが、
少しハマったことがあったので備忘録です。

いつも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サイト構築なので子テーマを使用して制作をした方が何かと安全なんですが、いかんせん子テーマなんぞ制作したこともなく、親テーマを部分的に上書きするやつでしょ??くらいの知識だったため非常に時間を使ってしまいました・・・。

・・・ちゃんと子テーマの勉強をしよう・・・。

WEBCRE8TOR.COM

SEARCH

PAGES

CATEGORY

ARCHIVE

LINK

CLOSE