web-dev-qa-db-fra.com

Est-il possible de désactiver une fonction d'un thème parent?

Je me demandais s'il était possible de désactiver complètement une fonction appelée dans le functions.php d'un thème parent et, dans l'affirmative, comment? (Bien sûr sans supprimer la fonction. Plutôt en ajoutant quelque chose à functions.php du thème enfant.)

4
Bram Vanroy

Seulement dans certaines circonstances.

  1. Si les fonctions du thème parent sont encapsulées dans des conditions function_exists, vous devriez pouvoir les remplacer. Par exemple:

    // Parent
    if (!function_exists('p_wpse_95799')) {
      function p_wpse_95799() {
        // 
      }
    }
    

    Si le thème enfant définit une fonction nommée p_wpse_95799, la fonction parent ne sera pas utilisée. Si c'est une possibilité, il vous suffira de définir une fonction qui ne fait rien, un peu comme ci-dessus.

  2. Si la fonction est "rattachée" à un filtre ou à une action, vous pourrez peut-être la décrocher. Il y a une prise. Le thème enfant functions.php se charge en premier, ce qui signifie que vous ne pourrez peut-être pas supprimer les filtres directement. Vous devrez les raccrocher pour s'exécuter après l'exécution du functions.php du parent. Sinon, vous essayez de supprimer quelque chose qui n'a pas été ajouté. Du Codex: "Il est également intéressant de noter que vous devrez peut-être donner la priorité à la suppression du filtre pour un raccord qui se produit après l'ajout du filtre. Vous ne pouvez pas supprimer le filtre avant qu'il ait été ajouté." Cela signifie principalement qu’il faudra trouver un hook qui court après le functions.php parent et y accrocher, éventuellement en manipulant le troisième paramètre de add_action ou add_filter afin de retarder l’exécution de votre fonction.

Ce sont les cas auxquels je peux penser maintenant. J'ai peut-être oublié un cas. J'espère que quelqu'un le fera savoir si j'ai :)

Il n'y a pas de PHP niveau "remove function" et si vous essayez de définir deux fonctions avec le même nom, vous obtiendrez une erreur.

Comme je ne vois pas le code de la fonction que vous souhaitez supprimer, je crains que vous ne cassiez quelque chose en le supprimant ou en le modifiant, si cela est même possible. Un peu de prudence est de mise.

8
s_ha_dum

Bien qu'il soit difficile de savoir exactement comment faire ce que vous voulez sans voir le code, cela peut aider - Comment remplacer les fonctions parent dans les thèmes enfants?

Ignorez simplement la partie déréglée de cette Q & R si vous n'êtes pas intéressé par la modification de la fonction, et concentrez-vous sur la manière de la supprimer.

En gros, vous voudrez utiliser remove_action ou remove_filter dans le fichier function.php de votre thème enfant et l'exécuter après la configuration du thème.

0
Jared Sulzdorf