web-dev-qa-db-ja.com

子テーマの定数のオーバーライド

私はfunction.php:でこれらの定数を宣言する親テーマを持っています

define("THEME_DIR", get_template_directory());
define("THEME_DIR_URI", get_template_directory_uri());
define("THEME_NAME", "BARNELLI");
define("THEME_STYLES", THEME_DIR_URI . "/css");
define("THEME_INCLUDES", THEME_DIR . "/includes");
define("THEME_POST_TYPES", THEME_DIR . "/includes/post-types");
define("THEME_INCLUDES_URI", THEME_DIR_URI . "/includes");
define("THEME_FONTS", THEME_DIR_URI . "/font-awesome");

includesディレクトリに含まれるいくつかのファイルを修正し、ディレクトリ構造(ファイルを含む)をコピーする必要があります。

私がコーデックスドキュメンテーションで読んだように、子テーマのfunction.phpは親テーマの同じファイルの前にロードされ、親テーマのルートにあるファイルだけが子テーマで上書きされる可能性があります。

私が子供のfunction.phpで変更された定数を宣言するならば、親のfunction.phpによって上書きされます、そして、私が子供のテーマディレクトリにインクルードされたファイルをコピーする(そして変更する)なら動作しません。

この問題を解決するために何を提案しますか?

2
fromthestone

定数はそれほど簡単には再定義できません。

https://stackoverflow.com/questions/8465155/redefine-constants-in-php

そのため、親テーマの代わりに子テーマの定数が使用されます。ただし、警告が表示されますが、警告を無効にしても問題はありません。

警告が不要な場合は、次のような定数を追加してください。

if ( !defined('CONSTANT') )
    define('CONSTANT', 'constant_value');

EDIT:

簡単な答えは、あなたの子テーマのfunctions.phpに定数を追加すれば、それらの定数を使うときに使われます。

広い答え、なぜあなたは定数を変更したくないのですか?定数は変更しないでください。あなたはあなたの子供のテーマで使用するためにあなた自身の定数のセットを作成することができます。私があなたであれば、Childテーマのfunctions.phpに以下を追加し、必要に応じてこれらの新しい定数を使用します。

define("CHILD_THEME_DIR", get_stylesheet_directory());
define("CHILD_THEME_DIR_URI", get_stylesheet_directory_uri());
define("CHILD_THEME_NAME", "BARNELLI-CHILD");
define("CHILD_THEME_STYLES", CHILD_THEME_DIR_URI . "/css");
define("CHILD_THEME_INCLUDES", CHILD_THEME_DIR . "/includes");
define("CHILD_THEME_POST_TYPES", CHILD_THEME_DIR . "/includes/post-types");
define("CHILD_THEME_INCLUDES_URI", CHILD_THEME_DIR_URI . "/includes");
define("CHILD_THEME_FONTS", CHILD_THEME_DIR_URI . "/font-awesome");

親テーマはすでに定数を宣言しているので、@ toschoの答えはあなたのケースには当てはまりません。

1
sakibmoon