web-dev-qa-db-fra.com

Remplacer les constantes dans le thème enfant

J'ai un thème parent qui déclare ces constantes dans 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");

je dois modifier certains fichiers inclus dans le répertoire includes et copier la structure de répertoires (y compris les fichiers).

Comme je l'ai lu dans la documentation du Codex, function.php dans le thème enfant est chargé avant le même fichier dans le thème du parent et seuls les fichiers situés à la racine du thème parent peuvent être remplacés dans le thème enfant.

Si je déclare une constante modifiée dans le function.php de l'enfant sera remplacé par le function.php du parent et si je copie (et modifie) un fichier inclus dans le répertoire du thème de l'enfant ne fonctionnera pas.

Que proposez-vous pour résoudre ce problème?

2
fromthestone

Les constantes ne peuvent pas être redéfinies aussi facilement.

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

Ainsi, les constantes des thèmes enfants seront utilisées à la place des parents. Cependant, il y aura un avertissement, mais cela ne devrait pas créer de problème si vous désactivez l'avertissement.

Vous devriez ajouter des constantes comme ceci si vous ne voulez aucun avertissement:

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

EDIT:

Réponse simple, ajoutez des constantes dans le functions.php de votre thème Enfant et il sera utilisé lorsque vous utiliserez ces constantes.

Réponse générale: Pourquoi avez-vous même pris la peine de modifier CONSTANTS? CONSTANTS ne devrait pas être modifié. Vous pouvez créer vos propres jeux de constantes à utiliser dans votre thème enfant. Si j'étais vous, j'ajouterais ce qui suit dans le functions.php du thème pour enfants et utiliserais ces nouvelles constantes chaque fois que nécessaire.

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");

Comme le thème parent déclare déjà les constantes, la réponse de @ toscho ne s'applique pas à votre cas.

1
sakibmoon