fichier thème enfant dans l’arborescence pas pris en compte

  • WordPress :4.9.8
  • Statut : hors support
15 sujets de 1 à 15 (sur un total de 18)
  • Auteur
    Messages
  • #2222710
    orfevre
    Participant
    Initié WordPress
    9 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 5.6

     

    J’ai créé un thème enfant dans les règles de l’art : fichier functions.php et style.css

    Puis 2 autres fichiers header.php et index.php qui écrasent bien les fichiers parents du même nom.

    Tout fonctionne correctement jusque là.

     

    Je dois modifier un fichier qui est dans l’arborescence du thème parent : /functions/customization.php

    J’ai donc créé la même arborescence que le thème parent, donc un dossier functions puis le fichier customization.php que j’ai modifié.

    Mais ça ne marche pas, c’est toujours le fichier customization.php du thème parent qui est pris en compte.

    J’ai pourtant lu que si on respecte bien la même arborescence que le thème parent ça devrait fonctionner.

    Merci pour votre aide.

    #2222784
    Noaneo
    Participant
    Maître WordPress
    29201 contributions

    Bonjour,
    Parfois, il ne faut pas respecter l’arborescence du thème parent, essayer de mettre le fichier à la racine du thème enfant.
    Ou le fichier fonctionne comme functions.php, ce qui est plus compliqué.
    Il faudra désactiver la fonction que vous voulez modifier puis mettre votre « code », le tout dans le fichier functions.php du thème enfant.

    Mais dommage de ne pas donner le nom du thème.

    #2222786
    orfevre
    Participant
    Initié WordPress
    9 contributions

    Merci.

    Désolé pour le nom du thème, le voici : foodies : https://fr.wordpress.org/themes/foodies/

    J’ai déjà essayé de le mettre à la racine du thème enfant, ça n’a pas non plus fonctionné.

     

    En fait au fichier parent je dois rajouter ça (dans le parent il y a 3 catégories, j’en ajoute une 4ème : category4):

    $wp_customize->add_setting( ‘foodiesCategory4’ , array(
    ‘default’ =>  »,
    ‘type’ => ‘theme_mod’,
    ‘capability’ => ‘edit_theme_options’,
    ‘transport’ =>  »,
    ‘sanitize_callback’ => ‘sanitize_text_field’,
    ) );
    $wp_customize->add_setting( ‘foodiesCategory4Color’ , array(
    ‘default’ => ‘#FF0000’,
    ‘transport’ => ‘refresh’,
    ‘sanitize_callback’ => ‘sanitize_hex_color’,
    ) );
    $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, ‘foodiesCategory4Color’, array(
    ‘label’ => __( ‘Set Category Color’, ‘foodies’ ),
    ‘section’ => ‘foodiesBlogSettings’,
    ‘settings’ => ‘foodiesCategory4Color’,
    ‘priority’ => 8
    ) ) );
    $wp_customize->add_control(‘foodiesCategory4’, array(
    ‘label’ => __( ‘Category 4’, ‘foodies’ ),
    ‘section’ => ‘foodiesBlogSettings’,
    ‘settings’ => ‘foodiesCategory4’,
    ‘type’ => ‘select’,
    ‘priority’ => 7,
    ‘choices’ => FoodiesGetCategoryListOptions()
    ) );

     

    Et

     

    je dois ajouter à une fonction inclus dans le même fichier (en italique gras l’ajout par rapport au parent) :

    add_action( ‘customize_register’, ‘foodies_customize_register’ );

    function foodies_custom_css(){ ?>

    <style type= »text/css »>
    span.category.<?php echo esc_attr(get_theme_mod(‘foodiesCategory4’)); ?>{
    background: <?php echo esc_attr(get_theme_mod(‘foodiesCategory4Color’,’#FFFFFF’)); ?>;
    }
    span.category.<?php echo esc_attr(get_theme_mod(‘foodiesCategoryThree’)); ?>{
    background: <?php echo esc_attr(get_theme_mod(‘foodiesCategoryThreeColor’,’#FFFF00′)); ?>;
    }
    span.category.<?php echo esc_attr(get_theme_mod(‘foodiesCategoryTwo’)); ?>{
    background: <?php echo esc_attr(get_theme_mod(‘foodiesCategoryTwoColor’,’#008000′)); ?>;
    }
    span.category.<?php echo esc_attr(get_theme_mod(‘foodiesCategoryOne’));?>{
    background: <?php echo esc_attr(get_theme_mod(‘foodiesCategoryOneColor’,’#FF0000′));?>;
    }

     

    #2222809
    PhiLyon
    Modérateur
    Maître WordPress
    20964 contributions

    Bonjour.

    Déjà s’il y a les catégories One, Two, Three la suivante doit être Four et non 4

    🙂

    #2222831
    orfevre
    Participant
    Initié WordPress
    9 contributions

    Non on met ce qu’on veut, si je veux l’appeler trente, tant que je le met partout à la place du 4, ça marche aussi, c’est du code. Ce n’est pas un problème de code, cela fonctionne très bien quand je modifie le fichier parent.

    #2222859
    Flobogo
    Modérateur
    Maître WordPress
    14975 contributions

    Bonjour,

    J’ai donc créé la même arborescence que le thème parent, donc un dossier functions puis le fichier customization.php que j’ai modifié.

    Très bien, mais ça ne suffit pas pour le faire fonctionner (vous pouvez avoir une très belle voiture, qui contient un super moteur … si on ne lui donne pas de carburant, ça ne fonctionne pas 😉  )

    Pour en revenir à votre fichier, il faut indiquer à votre thème-enfant que ce dossier supplémentaire existe avec le fichier dedans.

    Ajoutez le code suivant dans le functions.php de votre thème-enfant :

    require_once( get_stylesheet_directory(). '/functions/customization-enfant.php' );

    (je vous conseille de renommer le fichier voulu en customization-enfant.php … mais vous pouvez l’appeler comme vous voulez, du moment que vous l’appeler de la même façon dans le code ci-dessus)

    #2222894
    orfevre
    Participant
    Initié WordPress
    9 contributions

    Non j’ai déjà essayé ça aussi ça ne fonctionne pas, ce qui est normal puisque vous appelez le fichier enfant EN PLUS du fichier parent, donc les fonctions et tout le reste en double, ça bug = page blanche.

    Votre code sert quand vous créez un fichier quelconque que vous souhaitez appeler et qui ne doit pas remplacer un fichier parent.

    Je veux remplacer un fichier parent par le fichier enfant, normalement la méthode est celle que j’ai faite, respecter l’arborescence du fichier parent, je ne comprends pas pourquoi ça ne fonctionne pas.

    #2222960
    Noaneo
    Participant
    Maître WordPress
    29201 contributions

    Bonjour,
    Dernière mise à jour du thème :  5 avril 2017, plus d’un an sans mise à jour et juste 700 installations actives en 2 ans d’existence.
    pas sûr qu’il y aura encore des mises à jour https://themes.trac.wordpress.org/log/foodies/

    Il faudrait trouver un thème plus récent avec plus d’installation active.

    Il faut déjà désactiver cette fonction du thème parent, pour qu’il prenne en compte votre code.

    #2223016
    PhiLyon
    Modérateur
    Maître WordPress
    20964 contributions

    Bonjour.

    Avec le code ci-dessous (dans le functions.php enfant) et le fichier zippé joint (à mettre dans un dossier functions), ça fonctionne, par contre je n’ai pas testé au niveau des spans.

    require_once( get_stylesheet_directory(). '/functions/customization-child.php' );

    J’ai ajouté des « my » devant les fonctions pour éviter qu’il bloque.

    🙂

    Fichiers joints :
    Vous devez être connecté pour voir les fichiers joints.
    #2223271
    orfevre
    Participant
    Initié WordPress
    9 contributions

    Oui en changeant les noms des fonctions elles ne sont plus en double, donc plus de bug. Mais ça ne règle pas le problème puisque il n’y a pas les span. Impossible donc de modifier les couleurs des puces dans l’admin pour chaque catégorie.

    C’est quand même surprenant que wordpress ne permet pas avec un thème enfant d’écraser un fichier parent dans une arborescence, c’est quand même la base..

     

    #2223288
    orfevre
    Participant
    Initié WordPress
    9 contributions

    En fait le problème vient de l’appel du fichier customization dans le fichier functions du thème parent, tout à la fin :

    require get_template_directory() . ‘/functions/customization.php’;

    Alors qu’il faudrait :

    require get_stylesheet_directory() . ‘/functions/customization.php’;

     

    Ma nouvelle question est donc : peut-on annuler un require d’un thème parent depuis un thème enfant ?

    J’ai essayé un

    require_once get_stylesheet_directory() . ‘/functions/customization.php’;

    dans le fichier functions du thème enfant = page blanche.

    J’ai cherché dans les forums et j’ai l’impression que ce n’est pas possible, on peut se demander à quoi ça sert de faire un thème enfant si on ne peut pas changer grand chose…

    #2223424
    Flobogo
    Modérateur
    Maître WordPress
    14975 contributions

    normalement la méthode est celle que j’ai faite, respecter l’arborescence du fichier parent,

    De où sortez-vous cette belle certitude ? Vous avez lu un tuto ? (donnez-moi le lien, ça m’intéresse)

    Alors qu’il faudrait : require get_stylesheet_directory() . ‘/functions/customization.php’;

    C’est exactement ce que je vous ai conseillé. Simplement, je conseille de changer le nom du fichier, mais c’est juste par « convention », pour distinguer du fichier parent si besoin. (de même, on pourrait ne pas le mettre dans un dossier functions)
    Par contre, il est très important que la fonction porte le même nom … à condition que dans le fichier parent, au début de la fonction, il y ait bien le code : if (function_exists (nom_de_la_fonction))

    J’ai essayé un
    require_once get_stylesheet_directory() . ‘/functions/customization.php’;
    dans le fichier functions du thème enfant = page blanche.

    Dans ce cas, essayez avec un point avant l’appel du sous-dossier :

    require_once( get_stylesheet_directory(). './functions/customization-enfant.php' );

    #2223507
    Noaneo
    Participant
    Maître WordPress
    29201 contributions

    Bonjour,
    Il ne faut pas utiliser la fonction « fonction remove_action » et peut être « add_action » ?

    J’espère que ce thème de 2017, sera compatible avec WordPress 5.0 qui arrive soit le plutôt, le 19 novembre 2018 ou le 22 janvier 2019 au plus tard.
    https://make.wordpress.org/core/2018/10/03/proposed-wordpress-5-0-scope-and-schedule/
    Les thèmes doivent s’adapter à Gunterberg, comme les plugins.

    #2223519
    orfevre
    Participant
    Initié WordPress
    9 contributions

    De où sortez-vous cette belle certitude ? Vous avez lu un tuto ?

    J’ai cherché rapidement mais je n’ai pas retrouvé d’où me venait cette information, il me semblait l’avoir lues à plusieurs reprises, oublions là et partons du principe que ça ne marche donc jamais de reproduire l’arborescence du thème parent.

    C’est exactement ce que je vous ai conseillé

    Oui et je vous ai dit que ça ne marchait pas, page blanche, car on appelle 2 fois les mêmes fonctions ce qui n’est pas possible en php.

    fichier parent, au début de la fonction, il y ait bien le code : if (function_exists (nom_de_la_fonction))

    C’est bien le problème il n’y a pas cela dans le thème parent, il y a juste : require get_template_directory() . ‘/functions/customization.php’;

    essayez avec un point avant l’appel du sous-dossier

    ça ne marche pas non plus.

    Il ne faut pas utiliser la fonction « fonction remove_action » et peut être « add_action » ?

    non ces fonctions fonctionnent pour retirer uen action d’un hook, mais le require get_template_directory() n’est ni dans un hook ni dans une fonction.

     

    Je réitère ma question : il n’est donc pas possible dans un fichier enfant d’annuler un require ?

     

    J’ai l’impression que la seule solution c’est celle de PhiLyon, appeler un nouveau fichier avec un require et modifier les noms des fonctions, j’espérais une solution plus simple.

    Merci à tous pour votre aide en tout cas.

     

    #2223658
    Noaneo
    Participant
    Maître WordPress
    29201 contributions

    Pourquoi ne pas créer un fichier juste pour ajouter la 4e catégorie, en ne mettant que les codes pour la 4e catégorie, sans le reste et « l’appeler » en plus de l’autre fichier, ça ne fonctionne pas ?

    Je parlais de remove_action et add_action, sachant que ce n’est pas un hook ou une fonction, à cause de cette discussion
    https://wpfr.net/support/sujet/annuler-un-require-dun-theme-parent-via-le-theme-enfant/

    Je pensais que l’on pouvait choisir n’importe quel thème et installer ce genre de plugin
    https://fr.wordpress.org/plugins/wp-recipe-maker/

15 sujets de 1 à 15 (sur un total de 18)
  • Vous devez être connecté pour répondre à ce sujet.